仅适用于某些模板类型的覆盖方法
Override method only for some template types
我有一个基类,默认实现虚拟方法:
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/
首先,您应该明白,如果您不声明副本 构造函数,编译器为您隐含地提供了一个。隐式副本 构造函数对源对象进行成员的副本。
因此,只要不是原始的,您就不必担心拥有复制构造函数。
相关文章:
- 使用不同的返回类型覆盖虚拟函数
- C++ 使用不同的返回类型覆盖虚拟函数
- 给定这两种类型,我是否可以确定虚拟函数是否已被覆盖?
- 错误消息:不允许抽象类类型 "X" 的对象:纯虚拟"Y"没有覆盖器
- 无法键入 def std::chrono::microseconds 以覆盖其定义以更改其基础类型
- 当读取错误类型时,CIN覆盖我的初始化值
- 工会如何用于避免类型覆盖
- C++ 重载和覆盖 - 无法使用类型的右值初始化类型的参数
- 衍生模板类的覆盖返回类型
- 仅适用于某些模板类型的覆盖方法
- 抽象类型的对象 - 覆盖不起作用吗?
- 覆盖运算符<<适用于所有类型
- 虚拟函数、覆盖它们的类模板以及不完整的类型
- 覆盖方法返回类型,在C 中使用不完整的派生类
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- 与基类不同的返回类型的C 覆盖功能
- 警告LNK4206:找不到预编译类型信息; 未链接或覆盖;链接对象,就好像没有调试信息一样
- 如何为基本类型(浮点型)编写替换,以覆盖 运算符 == C++
- 仅覆盖模板中某些类型的函数
- 多个类型覆盖成员函数的模板部分特化