只有n个参数的可变模板
Variadic templates with exactly n parameters
我想创建一个只有N个参数的可变模板,其中N也是一个模板参数。例如,
template <int N, typename T[N]>
void function(T t[N]) {
// do stuff with t[0] through t[N-1]
}
(我意识到以上语法无效)
我知道实现这一点的一种方法是在sizeof...(ArgsT)
上使用static_assert
,其中ArgsT
是可变模板定义(即template <typename ...ArgsT>
)。
我只是想知道是否有一个更好的方法,不一定涉及static_assert
。
您可以使用std::enable_if
代替static_assert
:
template <std::size_t N, typename ...Args>
auto function(Args&&... args)
-> typename std::enable_if<N == sizeof...(Args), void>::type
{
...
}
更新:也可以在构造函数中使用它,其中N
是类的模板参数。
template <std::size_t N>
struct foobar
{
template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
foobar(Args&&... args) { ... }
};
相关文章:
- 如何反转整数参数包
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 为什么相同的函数签名只有区别,另一个通过 const 获取参数是重新定义?
- 模板参数列表中只有一个类型名称是什么意思?
- 当你只有它的指针时,如何将参数传递给函数?
- 如何使用只有一个引用参数的可变长度参数列表
- 其中,在只有参数化构造函数的类中初始化的 VPTR(虚拟指针)
- 只有未指定数量的参数的函数的目的是什么?
- 在C++中,只有默认参数的构造函数是默认构造函数
- C++ 磅定义只有一个参数
- C++ 错误:宏"[ClassName]"需要 X 个参数,但只有 1 个给定
- 当构造函数上只有一个参数时,会对参数进行阴影处理
- 为什么只有一个参数值的函数之后必须为每个参数指定默认值?
- 只有模板参数有成员功能时,才启用成员功能
- QLibrary 的解析函数只有一个参数?
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 只有n个参数的可变模板
- Std::all_of不接受类成员函数作为只有一个参数的函数