来自父类的调用方法
第一:我知道我的问题不是关于父类,而是我不知道如何调用这个结构,我认为父类最容易描述它。来自父类的调用方法
我有这样定义了两个类:)
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派生。
不知道我完全理解你正在尝试做的,更具体的例子将是有益的,但也许这你想要做什么:
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();
}
}
我认为最接近我想要达到的目标。谢谢 :) – Kevin 2012-04-18 09:08:58
你可以做的一件事就是创建第三个类,它抽象出这种行为,无论它来自两者还是仅仅是独立的。
对于术语,class_b
包含,或拥有的class_a
一个实例。
若要从class_a::foo
调用class_b::foo
,则需要使class_b
的实例可用于class_a::foo
。这可以通过向你注意到的class_a
添加一个成员变量来实现,或者通过class_a::foo
(两者在两个类之间创建一个循环依赖关系,这样可以更好地避免 - 你应该重新考虑你的设计)的一个参数来实现。或者通过一个全局变量(这通常不被推荐,因为它很难遵循控制流程,进行单元测试等)。
为什么不直接使用class_b局部变量FOO ::( )? – 2012-04-18 08:34:18
根据“特定需求”存储函数指针怎么样? – Nick 2012-04-18 08:35:10
虽然有解决方法来实现这种行为这闻起来像一个糟糕的设计..你真的想做什么? – 2012-04-18 08:39:25