5

重複の可能性:
C++ でのネストされた型/クラスの前方宣言

クラスの単純な相互参照の場合、クラス名を事前に宣言し、それを参照として使用することができます。このように、表現はポインターです。しかし、両方のネストされたクラスを相互参照したい場合 (以下の例を参照)、ネストされたクラスを事前宣言する方法がないように見えるため、問題が発生します。

私の質問は次のとおりです。私の例が機能するように、ネストされたクラスを事前宣言する方法はありますか?

そうでない場合:コードをあまり醜くしない一般的な回避策はありますか?

// Need to predeclare it to use it inside 'First'
class Second;
class Second::Nested; // Wrong

// Definition for my 'First' class
class First
{
public:
    Second::Nested* sested; // I need to use the nested class of the 'Second' class.
                            // Therefore I need to predeclare the nested class.
    class Nested { };
};

// Definition for my 'Second' class
class Second
{
public:
    First::Nested* fested; // I need to use the nested class of the 'First' class.
                           // This is okay.
    class Nested { };
};
4

1 に答える 1

4

要するに、答えはノーです。

しかし、最初に同様の質問を探すべきでした...

EDIT:可能な回避策は、両方のクラスを別のクラスにラップし、ラッパー内のネストされたクラスを前方宣言することです。

class Wrapper
{
public:

   // Forward declarations
   class FirstNested;
   class SecondNested;

   // First class
   class First
   {
   public:
      SecondNested* sested;
   };

   // Second class
   class Second
   {
   public:
      FirstNested* fested;
   };
};

このようにして、実装している名前空間からそれらを分離しながら、実装する必要がありWrapper::AますWrapper::B

于 2012-05-13T11:21:06.210 に答える