我正在尝试在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;
};
似乎我无法超载'&lt;'和'&gt;'以这种方式运营商,所以我想知道我能做些什么来解决这个问题。
答案 0 :(得分:27)
您的操作员功能正在通过副本接受他们的参数。但是,由于纯虚函数,无法构造新的GameNode实例。您可能希望通过引用接受这些参数。
答案 1 :(得分:6)
抽象类型只是有用的,因为它们是多态的,实际上它们必须以多态方式使用(这是虚拟和纯虚拟抽象之间的差异)。
多态性需要引用或指针。在这种情况下,您需要引用。
按值传递尝试通过复制参数来创建新对象,但是无法创建抽象类型的实例。通过引用传递使用现有实例而不是创建新实例,并避免此问题。