【发布时间】:2014-05-04 16:11:40
【问题描述】:
我想制作一个带有 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。
【问题讨论】:
-
static_assert 已经是一个不错的编译失败(坚持下去)
-
总之,当包大小不等于 int 参数时,您想要编译时错误?
static_assert就是为此而生的,为什么不是最好的方式呢? -
您也可以将 SFINAE 与
std::enable_if一起使用。但我不确定它是否更好。 -
@Jarod42:区别在于您是否希望重载存在。除非不污染重载集很重要,否则静态断言可能会产生更容易的诊断。