只有n个参数的可变模板

Variadic templates with exactly n parameters

本文关键字:参数 只有      更新时间:2023-10-16

我想创建一个只有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) { ... }
};