从折叠表达式创建带有分度的字符串

Create a string with delimeters from fold expression

本文关键字:字符串 折叠 表达式 创建      更新时间:2023-10-16

我有以下函数:

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

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

示例输出:

学建。调试("asd", "qwe", 123(;

打印: asdqwe123

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

我必须为此进行自己的字符串流替换吗?

带尾随分隔符:

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

不带尾随分隔符:

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

如果比赛要有最短的代码,那么最后两行可以合并为一行: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;   
}

输出:asd 112 0.04