par*_*iad 1 c++ templates c++11
我想制作一个具有N个参数的可变参数模板,其中N也是模板参数.例如,
template <int N, typename T[N]>
void function(T t[N]) {
// do stuff with t[0] through t[N-1]
}
Run Code Online (Sandbox Code Playgroud)
(我意识到上面的语法不正确)
我知道实现这一目标的一种方法是使用static_asserton在sizeof...(ArgsT)哪里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
{
...
}
Run Code Online (Sandbox Code Playgroud)
更新:也可以在构造函数中使用它,其中N是类的模板参数.
template <std::size_t N>
struct foobar
{
template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
foobar(Args&&... args) { ... }
};
Run Code Online (Sandbox Code Playgroud)