我有一个表格类:
template redblacknode<T>
它存储在以下形式的树中:
template redblacktree<redblacknode<T> >
对于特定的树,我希望节点既存储相同的信息(两个不同的长度),又要对不同的值进行索引。
我正在初始化这样的节点:
PageRecord addPR = PageRecord(pageNumber, -1);
findNode = new redblackNode<PageRecord>(addPR);
我是否可以通过重载==和&lt;运算符来获取多态行为,即使我没有将指针插入节点?
答案 0 :(得分:1)
您可以使用静态多态,但更简单的方法可以是:
template<typename T>
class redblacknode
{
public:
redblacknode(T t) : m_t(t) {}
T getT() const { return m_t; }
private:
T m_t;
};
template<typename T> inline
bool operator< (const redblacknode<T>& lhs, const redblacknode<T>& rhs) { return lhs.getT() < rhs.getT(); }
在main.cpp中:
redblacknode<int> a(1);
redblacknode<int> b(2);
redblacknode<int>* c = new redblacknode<int>(3);
qDebug() << (b < a); // print false
qDebug() << (b < *c); // print true
之后,如果你想要动态多态(基本上是虚函数+指针),它取决于你的模板redblacknode定义(你需要一个超类,参见CRTP)。
编辑:我假设你的指针类型是redblackNode *
Edit2:我改变了一些代码以反映你的代码。