下面的C++代码是什么意思?

问题描述 投票:0回答:1

谁能给我解释一下下面的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# c++ lambda
1个回答
0
投票

它是 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

© www.soinside.com 2019 - 2024. All rights reserved.