【发布时间】:2011-12-02 03:53:02
【问题描述】:
我有三个类,config、circuit 和 conn,它们相互保存指针,如下所示:
struct config { /* ... */ };
struct circuit {
config *cfg;
/* ... */
};
struct conn {
config *cfg;
circuit *ckt;
/* ... */
}
(没有访问控制和指针智能,因为这个程序大约从 C 转换到 C++ 的一半。现在这并不重要。)
当这些类被子类化时,它们三个都总是在一个组中被子类化:
struct foo_config : config { /* ... */ };
struct foo_circuit : circuit { /* ... */ };
struct foo_conn : conn { /* ... */ };
此外,cfg 指针在foo_circuit 或foo_conn 中将始终 指向foo_config 的实例,而ckt 指针是运行时不变的在foo_conn 中将始终 指向foo_circuit 的实例。这目前正在通过dynamic_cast 和断言强制执行。目前有两个不同的foos,但未来可能会更多。
是否有可能安排事情使cfg 和ckt 指针仍然可以访问泛型circuit 和conn 类的方法,并且在那里具有泛型类型,但是在子类的方法中,这些指针具有适当的子类类型,并且上述不变量成为编译时强制执行的?如果是这样,怎么做?如果没有,你会建议我做什么?
我更喜欢能够最大限度地减少我必须为每组子类编写的样板数量的答案。如果子类在匿名命名空间中定义并且在任何标题中不可见,我也更喜欢仍然有效的答案。
【问题讨论】:
标签: c++ inheritance