[英]Passing string to istringsream argument of a function
我想在一个函数中使用istringstream
,我希望istringstream
由值传递的string
初始化。 我可以避免显式的istringstream iss_input(string_input);
在功能体内?
void f(istringstream command){
}
int main(){
f( string("create_customer 1 Ben Finegold") );
}
上面的内容演示了我想要实现的目标,但是没有用。 我要解决的问题是命令解析 。
我只是使用std::string
作为参数。 但是,如果要传递std::istringstream
,则需要将其显式传递给f
,因为采用std::string
的std::istringstream
构造函数被标记为显式(#2) 。 例:
f(std::istringstream{"create_customer 1 Ben Finegold"});
上面的代码构造了一个临时的std::istringstream
作为参数,然后将其移到函数的parameter command
中。 它从这里开始使用move构造器#3。
请注意,我们不需要笨拙的
f(std::istringstream{std::string{"create_customer 1 Ben Finegold"}});
因为std::string
的const char*
构造函数不是显式的(#5) ,并且允许编译器执行最多一次隐式的用户定义转换。 因此,我在第一行代码中将字符串文字"create_customer 1 Ben Finegold"
转换为std::string
,然后将其用于显式构造临时std::istringstream
参数,然后将其移入command
。
我不太确定您要使用那个void f(...)
做什么,但是我认为这应该可以满足您的要求:
template<typename... Args>
void f(Args&&... args)
{
istringstream command(forward<Args>(args)...);
// You logics...
}
int main()
{
f("create_customer 1 Ben Finegold"s);
//...
return 0;
}
我使用可变参数模板,以防您想与其他流一起初始化本地流。 如果只需要使用字符串初始化字符串,则可以执行以下操作:
void f(string&& str)
{
istringstream command(forward<Args>(str));
// You logics...
}
基本上是一样的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.