gpt4 book ai didi

C++ 多态性和模板类

转载 作者:行者123 更新时间:2023-11-28 07:05:14 24 4
gpt4 key购买 nike

我有一个表单类:

  template redblacknode<T>

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

  template redblacktree<redblacknode<T> >

对于一棵特定的树,我希望节点都存储相同的信息(两个不同的 longs),但根据不同的值建立索引。

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

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

即使我没有将指针插入节点,我能否从中获得多态行为(通过重载 == 和 < 运算符)?

最佳答案

您可以使用静态多态性,但更简单的方法是:

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 定义(你需要一个父类(super class),参见 CRTP)。

编辑:我假设你的指针类型是 redblackNode*

Edit2:我更改了一些代码以反射(reflect)您的代码。

关于C++ 多态性和模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com