【问题标题】:How to solve that a Base class with a pointer to Base must be pointer to Son?(in C++)如何解决带有指向 Base 的指针的 Base 类必须是指向 Son 的指针?(在 C++ 中)
【发布时间】:2021-01-11 08:25:27
【问题描述】:

如果我想要这样的课程:

struct NodeLvl1 {
    NodeLvl1* parent;
};

一切正常,因为 NodeLvl1 指向另一个,依此类推。但如果我想制作它的高级版本:

struct NodeLvl2 : NodeLvl1 {//Also have a NodeLvl1*
    int extra_value;
};

问题是 NodeLvl2 类中的父级有一个指向 NodeLvl1 的指针,而不是我想要的 NodeLvl2 的指针。你最好的解决方法是什么?我在考虑BaseNode 或使用模板。有没有办法做到这一点?

【问题讨论】:

  • 您可能正在寻找CRTP pattern。你想用这个数据结构做什么呢?如果没有更多的上下文,很难在这里给出好的建议。
  • Thoes 用于二叉堆和搜索二叉树,但这实际上是一个很好的模式。谢谢。

标签: c++ class pointers inheritance


【解决方案1】:

不确定我是否正确理解了这个问题,因为我不确定用例是什么。但这里是一个尝试......

struct NodeLvl1 {
    NodeLvl1(NodeLvl1 *child) : childAddr(child) {}
    NodeLvl1* childAddr;
};

struct NodeLvl2 : NodeLvl1 {
    NodeLvl2(const int value) : NodeLvl1(this), extra_value(value) {}
    int extra_value;
};

这会将子结构的地址存储在父结构中。您可以通过以下方式确认:

int main() {
    NodeLvl2 child(3);  // random extra_value
    std::cout << &child << " " << child.childAddr << std::endl; // displays addresses
    return 0;
}

但不确定那是您要找的东西。

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2019-09-10
    • 2021-12-31
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多