0

首先:我知道我的问题不是关于父类,但我不知道这个结构是如何被调用的,我认为 parent 是最容易描述它的。

我有两个这样定义的类:

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 派生。

4

3 回答 3

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();
    }
}
于 2012-04-18T08:39:53.370 回答
0

您可以做的一件事是创建一个抽象此行为的第三个类,无论它是从两者派生的,还是只是独立的。

于 2012-04-18T08:35:37.687 回答
0

对于术语,class_b 包含拥有的实例class_a

class_b::foo对于从调用class_a::foo,您需要使 的实例class_b可用于class_a::foo。这可以通过添加一个成员变量来实现,class_a如您所指出的,或者一个参数class_a::foo(两者都会在两个类之间创建循环依赖,最好避免这种情况 - 您应该重新考虑您的设计)。或者通过全局变量(通常也不推荐,因为它很难跟踪控制流、进行单元测试等)。

于 2012-04-18T08:36:08.380 回答