首先:我知道我的问题不是关于父类,但我不知道如何调用这个结构,我认为父母最容易描述它。
我有两个类定义如下:
class class_a {
void foo() {
//stuff
}
};
class class_b {
class_a A;
void foo() {
//more stuff
}
};
我想要class_b :: foo();在class_a :: foo()中满足某些要求时调用;可以在class_a中设置一个变量,并在class_b :: foo()中检查它。但我想知道是否有更优雅的解决方案。
注意:class_b是并且不能从class_a派生。
答案 0 :(得分:1)
我不确定我完全理解你想要做什么,一个更具体的例子会有所帮助,但也许这可以做你想要的:
class class_b;
class class_a {
void foo(class_b* b);
};
class class_b {
class_a A;
void foo() {
A.foo(this);
}
void foo_impl() {
// stuff based on requirements in a::foo
}
};
void class_a::foo(class_b* b) {
//stuff
if (conditionsMet()) {
b->foo_impl();
}
}
答案 1 :(得分:0)
你可以做的一件事是创建一个抽象这种行为的第三个类,无论它是从两者派生的,还是仅仅是独立的。
答案 2 :(得分:0)
对于术语,class_b
包含,或拥有 class_a
的实例。
要从class_b::foo
致电class_a::foo
,您需要将class_b
的实例提供给class_a::foo
。这可以通过向你提到的class_a
添加成员变量,或者class_a::foo
的参数来实现(两者都在两个类之间创建循环依赖,这是更好的避免 - 你应该重新考虑你的设计)。或者通过全局变量(通常也不建议使用,因为它很难跟随控制流程,单元测试等)。