2016-10-08 19 views
0

2つの構造体bigguyとforyouがあるとします。ネストされた構造体/クラスとクラス内のクラスインスタンスの宣言の違い

私たちは、このようにそれらを宣言することができます:

struct bigguy 
{ 
    struct foryou 
    { 
     int survivors; 
    }cia, pavel; 
}; 

か、我々はこのように宣言できます。宣言の各タイプの長所と短所は

struct foryou 
{ 
    int survivors; 
}; 

struct bigguy 
{ 
    foryou cia; 
    foryou pavel; 
}; 

何ですか?それはプログラムの目的に依存しますか? 1つの方法が他の方法よりも優れた慣習と考えられているか? (仮想的なプログラムで1つだけの構造として、すべてを宣言しないように、実際の理由があると仮定します。)ここで

+1

_ "これはプログラムの目的にかかっていますか?"スコープを整理するための単なる方法です。 –

答えて

0

ネストされた構造体のいくつかの利点がいくつかの構造体の上にある:

  • あなたは非表示にする機能を持っていますprivateセクションのネストされた構造体。したがって、残りのコードはそれを処理する必要はありません。
  • リファクタリングが簡単になる場合があります。
  • bigguyのすべての派生クラスは、異なる名前空間またはスコープに属していても、当然foryouと表示されます。ネストされたenumの場合は、ネームスペースコンテキストの前に置かずに列挙定数を参照できるので、ネストされていると面白いです。

ネストされた構造体よりもいくつかの構造体の利点がいくつかあります。

  • あなたはbigguyクラスの外foryou構造体を使用する場合は、時々重い構文であるbigguy::を前に付けする必要があります。そのような宣言を避けるためにはautoが面白いことに注意してください。
  • bigguyがテンプレートクラスであり、typenameのいくつかの使用を避けると、より理解しやすいコンパイラメッセージが表示されます。実際にbigguyがテンプレートクラスで、foryouにテンプレートパラメータが必要ない場合は、複数の構造体が優先されます。あなたのbigguyテンプレートクラスを、foryouを内部に持つ非テンプレートクラスから派生させるとよいでしょう。
関連する問題