仅适用于某些模板类型的覆盖方法

Override method only for some template types

本文关键字:类型 覆盖 方法 适用于      更新时间:2023-10-16

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

class Base{
public:
   virtual void Method(){ /* Default implementation */ } 
}

和模板派生类:

template <typename T>
class Derived: public Base {
  ...

仅在t是可复制构造的情况下,我才需要覆盖base ::方法。我尝试过类似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>’

所以我认为语法是错误的。有没有办法实现我需要的东西?谢谢。

这是从http://www.cplusplus.com/articles/y8hv0pdg/

首先,您应该明白,如果您不声明副本 构造函数,编译器为您隐含地提供了一个。隐式副本 构造函数对源对象进行成员的副本。

因此,只要不是原始的,您就不必担心拥有复制构造函数。