仅对某些模板类型覆盖方法

时间:2017-12-13 09:26:48

标签: c++ sfinae method-overriding

我有一个基类,它有一个虚方法的默认实现:

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>’

所以我觉得语法错了。有没有办法实现我的需要?感谢。

1 个答案:

答案 0 :(得分:-2)

这是http://www.cplusplus.com/articles/y8hv0pDG/

  

首先,您应该了解如果您没有申报副本   构造函数,编译器隐式地给你一个。隐含的副本   构造函数执行源对象的成员副本。

所以你不必担心T有一个复制构造函数,只要它不是原始的。