2010-12-16 79 views
-1

如何在函数内部定义类以便彼此“知道”?这是我试图理解的一个非常愚蠢的版本。我想做类似的事情:在函数内声明的相互C++类

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之外的类,例如),所以我不找就怎么做类似的东西答案...

+0

为什么你不能只使用一个命名空间? – GWW 2010-12-16 06:00:34

+0

@GWW,我认为你没看完我的最后一句话。 – xscott 2010-12-16 06:11:16

+0

我读过它,但我很好奇为什么你不能使用命名空间并需要使用函数。 – GWW 2010-12-16 06:13:47

回答

3

你不”吨。

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

由于A::bar()B::hmm()的含义是相互依存,因为成员函数不能向前声明的类定义之外,就没有办法订购的定义,例如,这可以工作。 (你说你不是在寻找解决方法,但是我认为,在我看来,在一个函数定义中定义任何远程复杂的类,或多或少的多个类,阻碍了代码的可读性,并且是一个不好主意。)

+0

谢谢你的回复。我在IBM网站上发现了一些基本上相同的文档。我的Google搜索中缺少“本地课程”这个短语。然而,这不是一个关于风格或可读性的问题,所以如果你删除最后一点,我会给你答案的答案。 – xscott 2010-12-16 06:23:01

+2

@xscott:我认为关于可读性的评论很重要。如果你不想,你当然可以自由地不接受这个答案。 – 2010-12-16 17:19:03