C++ 如何仅在类的模板参数通过某些测试时声明方法?
阅读了C++ 如何仅在类的模板参数通过某些测试时声明方法?,c++,C++,阅读了std::enable_if上的文档后,我知道我可以做如下操作: // foo2 overload is enabled via a parameter template<class T> T foo2(T t, typename std::enable_if<std::is_integral<T>::value >::type* = 0) { return t; } //通过参数启用foo2重载 模板 T foo2(T,typename s
std::enable_if
上的文档后,我知道我可以做如下操作:
// foo2 overload is enabled via a parameter
template<class T>
T foo2(T t, typename std::enable_if<std::is_integral<T>::value >::type* = 0)
{
return t;
}
//通过参数启用foo2重载
模板
T foo2(T,typename std::enable_if::type*=0)
{
返回t;
}
但是,如果测试的模板参数来自类的模板,而不是方法的模板,该怎么办
在以下示例中,如果派生类的某个模板参数是浮点类型,我将尝试重载基类方法:
class Base
{
public:
template <typename X>
void fun() {}
};
template <typename T>
class Derived : public Base
{
public:
template <typename X, typename std::enable_if<std::is_floating_point<T>::value, void>::type* = nullptr>
void fun() {}
};
int main()
{
Derived<double> d1;
Derived<int> d2;
return 0;
}
类基
{
公众:
模板
void fun(){}
};
模板
派生类:公共基
{
公众:
模板
void fun(){}
};
int main()
{
衍生d1;
衍生d2;
返回0;
}
我该怎么做?目前,我得到:
错误:“struct std::enable_if”中没有名为“type”的类型
您可能希望对此使用部分专门化。在模板成员函数本身上使用
enable_if
(可以这样做,只需添加另一个默认值为T
的模板参数,并在该参数上使用enable_if
)
类基
{
公众:
模板
void fun(){std::cout
class Base
{
public:
template <typename X>
void fun() { std::cout << "Base fun()" << std::endl; }
};
template <typename T, bool is_float = std::is_floating_point<T>::value>
class Derived : public Base
{
public:
template <typename X>
void fun() { std::cout << "Derived fun()" << std::endl;}
};
template <typename T>
class Derived<T, false> : public Base
{
};