从折叠表达式创建一个带分隔符的字符串
Create a string with delimeters from fold expression
我有以下功能:
template<typename... Args>
void Foo(Args && ... args)
{
std::stringstream stream;
(stream << ... << args);
// Do somethign with it
}
它可以完美地将参数连接成一个字符串,但正如预期的那样,它给出了没有任何分隔符的输出。是否有可能以某种方式分隔彼此的输入?
示例输出:
elg.Debug("asd", "qwe", 123);
// Prints: asdqwe123
// Should prints something LIKE: asd qwe 123
我是否必须为此推出自己的 stringstream 替代品?
带尾随分隔符:
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
我有以下功能:
template<typename... Args>
void Foo(Args && ... args)
{
std::stringstream stream;
(stream << ... << args);
// Do somethign with it
}
它可以完美地将参数连接成一个字符串,但正如预期的那样,它给出了没有任何分隔符的输出。是否有可能以某种方式分隔彼此的输入?
示例输出:
elg.Debug("asd", "qwe", 123);
// Prints: asdqwe123
// Should prints something LIKE: asd qwe 123
我是否必须为此推出自己的 stringstream 替代品?
带尾随分隔符:
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