常见的方法(
语法方面
)是在定义/声明的第一次出现时指定默认参数,然后在下一次出现时提交,如下所示。
这意味着
解决这个问题的两种方法
这取决于您在使用问题中给出的两个代码片段中的哪一个。
方法1
//specify default argument here
template<typename U, typename = std::enable_if_t<std::is_base_of_v<int, U>>>
class TestClass {
public:
auto print() -> void;
};
//no default argument here
template<typename U, typename N>
void TestClass<U, N>::print()
{
std::cout << "Hello";
}
working demo
方法2
//specify the default argument here
template<typename U, std::enable_if_t<std::is_base_of_v<U, int>, int> = 0>
class TestClass
{
auto print() -> void;
};
//no need to specify default argument here
template<typename U, std::enable_if_t<std::is_base_of_v<U, int>, int> N>
void TestClass<U, N>::print()
{
std::cout << "Hello";
}
Working demo