23

特定の構造体タイプがPODであるかどうかをテストするC++0x static_assertが必要です(他のプログラマーが誤って新しいメンバーでそれを壊さないようにするため)。すなわち、

struct A // is a POD type
{
   int x,y,z;
}

struct B // is not a POD type (has a nondefault ctor)
{
   int x,y,z; 
   B( int _x, int _y, int _z ) : x(_x), y(_y), z(_z) {}
}

void CompileTimeAsserts()
{
  static_assert( is_pod_type( A ) , "This assert should not fire." );
  static_assert( is_pod_type( B ) , "This assert will fire and scold whoever added a ctor to the POD type." );
}

is_pod_type()ここで使用できるマクロまたは組み込みの種類はありますか?C ++ 0xのドキュメントでは見つかりませんでしたが、もちろん、0xに関するWebの情報はまだ断片的です。

4

1 に答える 1

29

C ++ 0xは、<type_traits>この種のイントロスペクションのヘッダーに型特性ライブラリを導入し、型特性がありis_podます。static_assert次のように組み合わせて使用​​すると思います。

static_assert(std::is_pod<A>::value, "A must be a POD type.");

これにはISOドラフトN3092を使用しているため、これが古くなっている可能性があります。これを最新のドラフトで調べて確認します。

編集:最新のドラフト(N3242)によると、これはまだ有効です。これがそれを行う方法のように見えます!

于 2011-08-24T00:37:34.460 に答える