具有n个参数的可变参数模板

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.

nos*_*sid 7

您可以使用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)