[英]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.