C++ "无法将参数声明为抽象类型
C++ "Cannot declare parameter to be of abstract type
我正在尝试在能够比较两件事的C++中实现通用包装器。我已经做到了如下:
template <class T>
class GameNode {
public:
//constructor
GameNode( T value )
: myValue( value )
{ }
//return this node's value
T getValue() {
return myValue;
}
//ABSTRACT
//overload greater than operator for comparison of GameNodes
virtual bool operator>( const GameNode<T> other ) = 0;
//ABSTRACT
//overload less than operator for comparison of GameNodes
virtual bool operator<( const GameNode<T> other ) = 0;
private:
//value to hold in this node
T myValue;
};
似乎我不能以这种方式重载"<"和">"运算符,所以我想知道我能做些什么来解决这个问题。
运算符函数通过复制接受其参数。 但是,由于纯虚函数的原因,无法构造游戏节点的新实例。 您可能希望通过引用来接受这些参数。
抽象类型之所以有用,只是因为它们是多态的,实际上它们必须多态地使用(这是虚拟和纯虚拟(又名抽象)之间的区别)。
多态性需要引用或指针。 在这种情况下,您需要引用。
按值传递尝试通过复制参数来创建新对象,但无法创建抽象类型的实例。 按引用传递使用现有实例而不是创建新实例,并避免了此问题。
相关文章:
- 如何定义一个纯抽象基类
- 将抽象基类中的所有纯虚函数定义为 varaidaic 模板
- 在C++单元测试上下文中,抽象基类是否应将其他抽象基类作为函数参数
- 用c++中的纯虚拟方法抽象模板类
- 我们可以在没有新实例化的情况下声明一个抽象方法来返回抽象超类中的子类对象吗
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 如何抽象接口类
- 自定义异常中的用户定义的空构造函数,具有多个继承和抽象基类
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- C++:在共享对象中调用抽象基类构造函数/未定义的符号
- 从抽象基类中获取重载函数
- 如何构建一个 Map,其中键是抽象基类(而不是值)
- 无法调用纯抽象基类超载
- 私下继承C++抽象基类是什么意思
- 将抽象派生类对象存储在基类向量中
- 如何在抽象基类中实现运算符+
- 如何为抽象基类创建模板实例化?
- 如何从其抽象母类上的指针初始化子类?
- 崩溃 __cxxabiv1::__cxa_pure_virtual () - vtable ptr 到抽象基类
- CRTP - 是否可以创建一个抽象基类?