c ++:将所有参数组合为字符串的函数

sim*_*n-f 0 c++ string concatenation

我需要写一个concat像这样的函数:

std::string concat(...);
Run Code Online (Sandbox Code Playgroud)

接受任意数量的不同类型的参数(char,char *,int,std :: string等),并返回它们的串联。例如:

concat(88,'a',"home",9) == std::string("88ahome9")
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 5

您可以使用以下内容:

template<typename ... Ts>
std::string concat(Ts&&...args)
{
    std::stringstream ss;
    const int dummy[] = {0, (ss << std::forward<Ts>(args), 0)...};
    static_cast<void>(dummy);  // avoid warning for unused variable
    return ss.str();
}
Run Code Online (Sandbox Code Playgroud)

现场例子

或在C ++ 17中,带有可折叠表达式

template<typename ... Ts>
std::string concat(Ts&&...args)
{
    std::stringstream ss;
    (ss << ... << std::forward<Ts>(args));
    return ss.str();
}
Run Code Online (Sandbox Code Playgroud)

  • 因此,要求应在问题中说明。 (4认同)