2017-12-14 8 views
1
  1. 私は構造体A(の大きさを保持するために 構造体Bの内側にint型を持つようにしたいのstruct B.
  2. を保持している構造体A)を持っています。
  3. しかし、構造体Bは、いつでも異なる未知のサイズの ベクトルを持ちます。
  4. 揮発性のベクトル は、構造体Aのサイズを常に変更します。

ポインタを作成せずにこれを行う方法はありますか?C++親データ型のsizeofを取得するには?

struct A { 
    struct B { 
     std::vector<int> some_Vector;  // unknown size 
     size_t A_size = ????;    // must always return the total size of A 
    }; 

    B struct_B; 
}; 
+0

'ポインタを作成しないでください?' std :: vectorはおそらくポインタで実装されています(https://stackoverflow.com/questions/34024805/c-sizeof-vector-is-24を参照)。 – Matt

+0

関数を使用します。 –

+2

'sizeof(some_Vector)'は決して変更されません。私はXYの問題があると思う:https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

答えて

4
  1. sizeofによって与えられるような)ベクター自体の大きさが一定であり、それが保持しているどのように多くの要素によって影響されないであろう。 「論理サイズ」と「物理サイズ」を区別します。結局のところ、sizeof(std::vector<int>)は何かに評価されなければならず、ベクトルには何もオブジェクトが存在しないので、ベクトルは全くありません。ベクトルの内容は、メンバーstd::vector::sizeによって返された値にのみ影響します。

  2. したがって、各構造のサイズは何か一定になります。両方の構造体が完全に定義された後で取得する必要があります。これはコンストラクタを使って実現できます。デフォルトの初期化子の代わりに。

    struct A { 
        struct B { 
         std::vector<int> some_Vector;  
         size_t A_size; 
         B();    
        }; 
    
        B struct_B; 
    }; 
    
    A::B::B() : A_size{sizeof(A)}, some_Vector{} { 
    } 
    

けれども、率直に言って、私は誰もがsizeof構造をキャプチャし、実行時にそれにハングアップする理由はほとんどの理由を参照してください。私がすでに言ったように、それは一定です。

関連する問題