C ++多态和模板类

时间:2014-02-18 16:41:58

标签: c++ templates polymorphism

我有一个表格类:

  template redblacknode<T>

它存储在以下形式的树中:

  template redblacktree<redblacknode<T> >

对于特定的树,我希望节点既存储相同的信息(两个不同的长度),又要对不同的值进行索引。

我正在初始化这样的节点:

PageRecord addPR = PageRecord(pageNumber, -1);
findNode = new redblackNode<PageRecord>(addPR);

我是否可以通过重载==和&lt;运算符来获取多态行为,即使我没有将指针插入节点?

1 个答案:

答案 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:我改变了一些代码以反映你的代码。