谁能给我解释一下下面的C++代码的含义吗?最好将其翻译成 C#,这样我可以更清楚地理解它。非常感谢!
template <typename T, typename ... Args>
static std::string Join(const T& delim, const Args& ...args)
{
std::ostringstream oss;
bool first = true;
auto tmp = { ((first ? oss : oss << delim) << args, first = false)... };
[&tmp]() { };
return std::move(oss.str());
}
其用法示例如下
Join("something", "\"", "\"");
我想知道它会产生什么。
它是 C#
String.Join(String, Objectt])
方法的 C++ 等效项。它连接由 delim
分隔的值列表,并且值可以是任何可流类型。
此函数是一个可变参数模板。编译器将
Args
推断为传入参数的类型。
oss
是一个输出流,它将输出值附加到内部 std::string
。
tmp
是一个 lambda,通过 fold 表达式对
args
中的每个值进行调用。
在折叠的第一次迭代中,
first
为真,所以
表达式 (first ? oss : oss << delim)
返回(对)oss
本身的引用。在后续迭代中,first
为 false,因此表达式返回 oss << delim
的结果,这是对 oss
的引用。然后每次迭代都会执行 oss << args
来输出 args
的当前值。
然后返回
std::string
中存储的最终oss
。