1

structs私は、 C++ に変換しているいくつかの C コードに由来するセットを持っています。私が理解したことによると、それらは POD タイプである必要があります。ここではいくつかの例を示します。

struct Data {
  u16 type : 12;
  u8 variant : 3;
  bool isTop : 1;
};

struct DData {
  u16 type : 12;
  u8 variant : 3;
  u8 layer : 1;
};

struct TData {
  struct Data data1, data2;
  struct DData ddata[MAX];
  u16 x;
  u8 y;
  u8 s : 4;
  u8 l : 4;
  u8 wl : 3;
  u8 wr : 3;
  u8 lt : 2;
};

これまで、これらの構造体へのポインターをパラメーターとして持っていた多くのメソッドがあり、それらを構造体宣言内に直接移動して、多くの入力を節約することを計画していました。

struct Data {
  u16 type : 12;
  u8 variant : 3;
  bool isTop : 1;

  inline bool hasFlag(u64 flag) { return Types::specs[type].flags & flag; }
 };

この方法で追加できるすべてのメソッドがこれに対して安全かどうか疑問に思っていましたstruct.これらの構造はネットワーク経由でバイナリファイルにシリアル化されるため、これが何かを壊す可能性がないことを確認する必要があります. 私が正しければ、それらは POD タイプのままである必要があるため、特定の問題やオーバーヘッドは発生しません。

4

1 に答える 1

4

それはPODのままでなければなりません。

std::is_pod次の特性を使用して確認できます。

std::is_pod<Data>::value;

がPOD のtrue場合は false、それ以外の場合は false になります。Data

とにかく、関数を構造体本体に移動することは気にしません。異なる呼び出し構文以外には、実際には何も得られません。

于 2013-01-09T04:57:42.113 に答える