在函数内部声明的相互C ++类

时间:2010-12-16 05:41:36

标签: c++ class inner-classes local-class

如何在函数内部定义类以便它们彼此“了解”?这是我正在努力理解的一个非常愚蠢的版本。我想做点什么:

void foo () {

    struct A {
        static void bar () {
            B::hmm();
        }
    };

    struct B {
        static void hmm () {
            A::bar();
        }
    }
}

这不起作用,因为A :: bar()对B还没有任何了解。在函数之外,我可以推迟A :: bar()的定义,直到声明B为止。类似的东西:

void foo () {

    struct A {
        static void bar ();
    };

    struct B {
        static void hmm () {
            A::bar();
        }
    }

    void A::bar () {
        B::hmm();
    }
}

但这似乎不适用于函数内部。

代替一些巧妙的范围宣言使这一切都有效,我也欢迎一个明确的答案,说这在C ++中是不可能的(请参考参考资料)。

我知道还有其他方法可以解决这个问题(例如,在foo之外声明类),所以我不是在寻找关于如何做类似事情的答案......

1 个答案:

答案 0 :(得分:3)

你没有。

必须在类定义中定义本地类的成员函数。

因为A::bar()B::hmm()的定义是相互依赖的,并且因为成员函数不能在类定义之外进行前向声明,所以无法对定义进行排序以使其可以正常工作。 / p>

(你说你不是在寻找解决方法,但我会说,在我看来,在函数定义中定义任何远程复杂的类,或多或少的多个类,会妨碍代码的可读性并且是一个坏的想法。)