我知道在类主体中声明未嵌套类的两种方法。
首先是:
class A
{
friend class B; // B is forward-declared + friend
};
第二个是:
class A
{
class B* ptr; // B is forward-declared + pointer
};
可以在类主体之外预先声明一个类,但是由于某些原因,让我们忘记此选项;
因此,我想声明这样的成员:
class A
{
/* somehow declare B in the body*/
B* getInstanceB();
};
值得一提的是:声明了一个指针:
class A
{
class B* pointer;
B* getInstanceB(); //fine
};
与朋友一起声明:
class A
{
friend class B;
B* getInstanceB(); //GCC 5.3.0 issues error, MSVC compiles
};
我很遗憾没有这样的前向声明语法:
class ::[optional-namespace::]ClassName
;
这将区分嵌套类的正向声明和未嵌套的类的正向声明。是否可以通过其他方式在当前标准中执行此操作?
要向前声明一个B
在的类定义内命名的类,A
而不必将该类嵌套在中A
,则可以执行以下操作:
class A {
typedef class B B;
// do something with B
};
可以在这里找到解释。
实际可行的演示:http : //coliru.stacked-crooked.com/a/27913ce45a572d36
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句