我有几个相互关联的类,将由多种不同的算法使用
例:
struct B;
struct A {
B* parent;
};
struct B {
std::vector<A*> children;
};
每种算法都可能希望根据它们对它们的处理来专门化这些类,因此大概我们应该从A和B派生它们
struct Aderived : A {...};
struct Bderived : B {...};
但是
Aderived
中的方法将想要将parent
视为Bderived*
(以访问Bderived
添加的方法或成员),而Bderived
将想要将children
的元素视为Aderived*
。1)
Aderived
和Bderived
中的方法是否有一个好的方法,可以避免每次想要分别访问parent
和children
方法时都必须对Bderived
和Aderived
进行静态强制转换。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/