gpt4 book ai didi

c++ - 相关 C++ 类中多态性的最佳实践?

转载 作者:行者123 更新时间:2023-11-30 04:45:26 29 4
gpt4 key购买 nike

我有几个相互关联的类,它们将被多种不同的算法使用

例子:

struct B;

struct A {
B* parent;
};

struct B {
std::vector<A*> children;
};

每个算法都可能希望根据它们对它们所做的事情来专门化这些类,因此大概我们应该将它们派生自 A 和 B

struct Aderived : A {...};
struct Bderived : B {...};

Aderived 中的方法将希望将 parent 视为 Bderived*(以访问 Bderived 添加的方法或成员code>) 和 Bderived 将希望将 children 的元素视为 Aderived*

1) AderivedBderived 中的方法是否有一个好的方法来避免必须对 parent 进行静态转换children 每次他们想要分别访问 BderivedAderived 的方法时。

2) 你怎么能得到这样的东西来编译呢,因为你不能转发声明一个类是从另一个派生的......

struct Aderived : public A {
int a;
void x() { static_cast<Bderived*>(b)->b = 1; } // ERROR
};

struct Bderived : public B {
int b;
void x() { static_cast<Aderived*>(avec.back())->a = 1; }
};

最佳答案

将 A 和 B 定义为模板:

template < class T1 >
struct A
{
T1* parent;
};

template < class T2 >
struct B
{
std::vector < T2* > children;
};

继承的目的是:

struct Aderived : public A < Bderived >
{
// ...
};

struct Bderived : public B < Aderived >
{
//...
};

关于c++ - 相关 C++ 类中多态性的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261506/

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