【发布时间】:2013-12-15 05:14:27
【问题描述】:
我可以定义一个可变参数模板函数,而不是改变类型,而只是一个单一的?如果我的目标是定义一个只添加可变参数 int 而不是浮点数或其他任何东西的函数,我可以用 template<int....> 语法以某种方式做到这一点吗?
我可以轻松组合的多类型样本:
int add() { return 0; }
template<typename T, typename... TS>
T add(T n, TS... m)
{ return n+add(m...); }
但是我如何只在其中使用int?
显然不能遵循将<int> 放在模板参数列表中的模式,因为我想要一个在(...) 之间而不是<...> 之间接受参数的函数,如下所示:
template<int n>
int constant() { return n; }
constant<4>(); // using the int-template function
因此,对我来说很明显以下方法不起作用。但作为一个起点......
template<int, int...>
int add(int n, int... m) // error, of course.
{ return n+add(m...); }
如何为add(1)、add(1,2)、add(1,2,3) 等定义add,但仅限于int-参数。它不应该为add(1.0) 生成float 函数(可能调用会起作用,但这只是因为1.0 被转换为int)。
注意:我的意思不是仅仅将T 或TS 类型限制为enable_if 等。我只是认为我在这里错过了这种可变参数模板的语法。
【问题讨论】:
-
这基本上没有意义,只需使用
std::initializer_list -
@aaronman 哦,伙计!缺少明显的。谢谢你。你为什么不把它作为一个答案。除了,我需要写‘add({1,2,3})’,对吧?
标签: c++ templates c++11 variadic-templates