可变参数模板中的初始化列表

时间:2015-09-28 17:14:28

标签: c++ templates variadic-templates template-specialization

this question的答案表明,braced-init列表不能用于模板参数。如果有明确的初始化列表专业化怎么办?

我正在尝试编写类似reduce的函数,它接受以下语法: f(1, {2}, {3,4,5}, 6)。我的尝试是:

#include <initializer_list>

template <typename... Rest>
int add(int acc, std::initializer_list<int> list, Rest... rest) {
    auto res = acc;
    for (auto i : list) res += i;
    return add(res, rest...);
}

template <typename... Rest>
int add(int acc, int n, Rest... rest) {
    return add(acc+n, rest...);
}

int add(int result) { return result; }

int main() {
    int result = add(1, {2}, 3, {4, 5, 6});
}

但是braced-init列表不会被解释为初始化列表的构造函数。

还有其他方法可以使这种语法有效吗?

0 个答案:

没有答案