9

奇妙な問題に対する「創造的な」(つまり奇妙な) 解決策を検討しているときに、ある特定のアイデアが私の好奇心を刺激しました。私が使用する可能性が高いアイデアではありませんが、標準に従って合法であるかどうかを知りたいです。

簡単な例は...

class base_t
{
  private:
    //  stuff

  public:
    //  more stuff

    class derived_t : public base_t  //  <--- weirdness here
    {
      //  ...
    };      
};

奇妙さの一部 - which containsderived_tを継承しているため、 contains 自体のように見えます。base_tderived_tderived_t

では、これは奇妙に繰り返されるテンプレート パターンと同様の、有効だが奇妙で恐ろしいものなのか、それとも違法なのか?

編集- 私がこれを考えた理由は、名前空間の汚染を回避しようとしていたことをおそらく言及する必要があります。クラスをメンバーとして持つことで、別のグローバル クラスの導入を回避できますが、その 2 番目のクラスは最初のクラスから多くを共有する必要があります。

クラスのペアが 1 つだけであれば問題ありませんが、これはコード ジェネレーター用です。

4

1 に答える 1

9

それは合法ですが、コードを配置した方法ではないかもしれません。基本クラスは、使用された時点で完了する必要がありますが、定義の最後の括弧までは完了していません。したがって、ネストされたクラスを前方宣言してみてください。

class base_t
{
  private:
    //  stuff

  public:
    //  more stuff

    class derived_t;
};

class base_t::derived_t : public base_t
{
  //  ...
};      
于 2012-11-11T00:37:56.323 に答える