C++ 共同C++;在函数内部声明的类

C++ 共同C++;在函数内部声明的类,c++,class,inner-classes,local-class,C++,Class,Inner Classes,Local Class,如何在函数内部定义类,使它们相互“了解”?这是我试图理解的一个非常简单的版本。我想做一些类似的事情: void foo () { struct A { static void bar () { B::hmm(); } }; struct B { static void hmm () { A::bar(); } } } void foo () {

如何在函数内部定义类,使它们相互“了解”?这是我试图理解的一个非常简单的版本。我想做一些类似的事情:

void foo () {

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

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

    struct A {
        static void bar ();
    };

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

    void A::bar () {
        B::hmm();
    }
}
这不起作用,因为A::bar()还不知道关于B的任何信息。在函数之外,我可以将a::bar()的定义推迟到声明B之后。比如:

void foo () {

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

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

    struct A {
        static void bar ();
    };

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

    void A::bar () {
        B::hmm();
    }
}
但这在函数内部似乎不起作用

代替一些聪明的范围声明,使这一切都有效,我也欢迎一个明确的答案,这是不可能的C++(参考)。 我知道还有其他方法可以解决这个问题(例如,在foo之外声明类),所以我不想寻找关于如何做类似事情的答案…

你不知道

局部类的成员函数必须在类定义中定义

由于
A::bar()
B::hmm()
的定义是相互依赖的,并且由于成员函数不能在类定义之外进行前向声明,因此无法对定义进行排序以使其工作


(你说你不是在寻找解决办法,但我还是要说,在我看来,在函数定义中定义任何远程复杂类,或多或少的多个类,都会妨碍代码的可读性,这是个坏主意。)

为什么你不能只使用名称空间?@GWW,我想你没有读我的最后一句话。我读过了,但我很好奇为什么不能使用名称空间,而需要使用函数。@GWW,我没有理由不能做十几件大致相同的事情中的任何一件。我只是希望了解关于语言的另一个细节。我之所以觉得这很有趣,是因为它将这些类的范围限制在了它们唯一应该看到或使用的地方。啊,好吧,我只是好奇,谢谢。谢谢你的回复。我在IBM的一个网站上找到了一些说明基本相同的东西的文档。“本地类”这个短语是我在谷歌搜索中遗漏的。然而,这不是一个关于风格或可读性的问题,所以如果你删除最后一点,我会相信你的答案。@xscott:我认为关于可读性的评论很重要。当然,如果你不愿意,你可以不接受这个答案。