从折叠表达式创建一个带分隔符的字符串

ori*_*and 5 c++ visual-c++ fold-expression c++17

我有以下功能:

template<typename... Args>
void Foo(Args && ... args)
{
    std::stringstream stream;
    (stream << ... << args);
    // Do somethign with it
}
Run Code Online (Sandbox Code Playgroud)

它可以完美地将 params 连接到一个字符串中,但正如预期的那样,它给出了没有任何分隔符的输出。是否有可能以某种方式分隔彼此的输入?

示例输出:

elg.Debug("asd", "qwe", 123);

// 打印:asdqwe123

// 应该打印类似的东西:asd qwe 123

我是否必须为此滚动我自己的字符串流替换?

Yas*_*has 7

带有尾随分隔符:

template<typename... Args>
void debug(Args&& ... args)
{   
    std::ostringstream stream;
    ((stream << args << ' '), ...);
}
Run Code Online (Sandbox Code Playgroud)

没有尾随分隔符:

template<typename FirstArg, typename... Args>
void debug(FirstArg&& firstArg, Args&& ... args)
{   
    std::ostringstream stream;
    stream << firstArg;
    ((stream << ", " << args), ...);
}
Run Code Online (Sandbox Code Playgroud)

如果比赛是有最短的代码,那么最后两行可以合并为一行:stream << firstArg, ((stream << ", " << args), ...);.


#include <iostream>

template<typename... Args>
void debug(Args&& ... args)
{   
    ((std::cout << args << ' '), ...);
}

int main () {
    debug("asd", 112, 0.04);
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

输出: asd 112 0.04