我有一个基类,它有一个虚方法的默认实现:
class Base{
public:
virtual void Method(){ /* Default implementation */ }
}
和模板派生类:
template <typename T>
class Derived: public Base {
...
如果T是可复制构造的,我只需要覆盖Base :: Method。我尝试过类似SFINAE的东西:
typename std::enable_if<std::is_copy_constructible<T>::value, void>::type Method(){ /* Override implemetation */ }
但是当T不是可复制构造时,我得到了这个错误:
error: no type named ‘type’ in ‘struct std::enable_if<false, void>’
所以我觉得语法错了。有没有办法实现我的需要?感谢。
答案 0 :(得分:-2)
这是http://www.cplusplus.com/articles/y8hv0pDG/
首先,您应该了解如果您没有申报副本 构造函数,编译器隐式地给你一个。隐含的副本 构造函数执行源对象的成员副本。
所以你不必担心T有一个复制构造函数,只要它不是原始的。