簡體   English   中英

將字符串傳遞給函數的istringsream參數

[英]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::stringstd::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::stringconst 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;
}

編輯1

我使用可變參數模板,以防您想與其他流一起初始化本地流。 如果只需要使用字符串初始化字符串,則可以執行以下操作:

void f(string&& str)
{
    istringstream command(forward<Args>(str));
    // You logics...
}

基本上是一樣的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM