了解这种可变模板函数如何工作

时间:2016-02-05 20:14:09

标签: c++ c++11 variadic-templates

this answer中,我看到了一些C ++ 11代码,我并不理解(但我想)。

在那里,定义了一个可变参数模板函数,(可能是?)接受所有传递的参数并将它们插入std::ostringstream

这是函数(参见链接答案的完整工作示例):

template<typename T, typename... Ts>
std::string CreateString(T const& t, Ts const&... ts)
{
    using expand = char[];

    std::ostringstream oss;
    oss << std::boolalpha << t;
    (void)expand{'\0', (oss << ts, '\0')...};
    return oss.str();
}

当我不得不猜测时,我会说,创建一个字符数组并使用\0 - 字节进行初始化,并将函数的参数插入到流中作为一方发生初始化的效果(该逗号表达式的一部分)。最后,数组包含与插入到流中的项一样多的空值。它被转换为void以避免编译器警告(未使用的变量)。与此类似:

char arr[] = {'\0', (oss << t1, '\0'), (oss << t2, '\0'), ..., (oss << tn, '\0')};

我是否试图准确描述此功能的工作原理?有人可以解释一下这里可能有什么相关的设计决策,为什么以这种方式实现它是有益的(我猜这个替代方法是编译时递归)?

1 个答案:

答案 0 :(得分:3)

在问题的评论部分收到一些有用的提示后,我可以找出一些要点: