相互关联的C 类中多态性的最佳实践
Best practice for polymorphism in interelated C++ classes?
我有几个相互关联的类,这些类将由多个不同算法
使用示例:
struct B;
struct A {
B* parent;
};
struct B {
std::vector<A*> children;
};
每种算法可能希望根据它们对它们的所作所为来专业化这些类
struct Aderived : A {...};
struct Bderived : B {...};
但是Aderived
中的方法将希望将parent
视为Bderived*
(访问Bderived
添加的方法或成员(,并且Bderived
将需要将children
的元素视为Aderived*
。
1(在Aderived
和Bderived
中的方法是否有很好的方法,可以避免每次要访问Bderived
和Aderived
的方法时必须在parent
和children
上进行静态铸件。
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 >
{
//...
};
只需声明将 B*
的 A
成员函数声明为 Bderived*
,然后在定义 Bderived
之后定义它们:
struct Aderived : public A {
int a;
void x();
};
struct Bderived : public B {
int b;
void x() { static_cast<Aderived*>(avec.back())->a = 1; }
};
inline void Aderived::x() { static_cast<Bderived*>(b)->b = 1; }
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 运行时多态性和dynamic_cast需要澄清
- 如何调用指针类型的方法(禁用多态性)?
- 实现后期多态性的最佳方法
- 相互关联的C 类中多态性的最佳实践
- dynamic_cast和多态性的最佳实践