我定义了一个函数如下,它接受一个整数作为模板形参,它像预期的那样工作。
template<int D, typename std::enable_if<std::greater<int>{}(D, 100), void*>::type = nullptr>
void func(int p) {
// something
}
func<100>(1); // ERROR
func<101>(1); // OK
现在,我想把int
也作为模板参数。这意味着我需要这样的东西:
template<T D, typename std::enable_if<std::greater<T>{}(D, 100), void*>::type = nullptr>
void func(int p) {
// something
}
嗯,我试过了,但是不能编译。
template<typename T, template<T D, typename std::enable_if<std::greater<T>{}(D, 100), void*>::type = nullptr>>
void func2(int p) {
// something
}
首先需要声明T
为类型模板参数。例如
template<typename T, T D, typename std::enable_if<std::greater<T>{}(D, 100), void*>::type = nullptr>
void func(int p) {
// something
}
然后
func<int, 100>(1); // ERROR
func<int, 101>(1); // OK
如果不想明确指定int
,可以
template<auto D, typename std::enable_if<std::greater<>{}(D, 100), void*>::type = nullptr>
void func(int p) {
// something
}
然后
func<100>(1); // ERROR
func<101>(1); // OK
如果您可以访问c++ 17,请使用auto
非类型模板参数:
template<auto D, typename std::enable_if<std::greater<>{}(D, 100), void*>::type = nullptr>
void func(int p) {
// something
}