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

时间:2014-05-04 16:11:40

标签: 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]
}

(我意识到上面的语法无效)

我知道实现此目的的一种方法是在static_assert上使用sizeof...(ArgsT),其中ArgsT是可变参数模板定义(即template <typename ...ArgsT>)。

我只是想知道是否有更好的方式,不一定涉及static_assert

1 个答案:

答案 0 :(得分: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
{
    ...
}

更新:它也可以在构造函数中使用它,其中N是类的模板参数。

template <std::size_t N>
struct foobar
{
    template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
    foobar(Args&&... args) { ... }
};
相关问题