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列表不会被解释为初始化列表的构造函数。
还有其他方法可以使这种语法有效吗?