クラスボディ内でネストされていないクラスを宣言する方法は2つあります。ネストされていないクラスをクラス本体にforward宣言する方法
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();
};
それは言及する価値がある、それ:friend宣言で
class A
{
class B* pointer;
B* getInstanceB(); //fine
};
: ポインタを宣言して
class A
{
friend class B;
B* getInstanceB(); //GCC 5.3.0 issues error, MSVC compiles
};
このような前方宣言構文がないことは深く残念ですlike:
class ::[optional-namespace::]ClassName
;
ネストされたクラスの前方宣言とネストされたクラスの前方宣言を区別します。他の方法で現在の標準でそれを行うことは可能ですか?
'' A'の外B'を宣言前進して何が悪いのでしょうか? – erenon
@erenon間違いはありません。しかし、別の可能性がある場合、私はそれを知りたいです:) – xinaiz
私はこれを手放すしましょう。既存のソリューションが存在し、うまく機能しているときに、問題とは異なる解決策があるかどうかを調べようとしています。 –