23

我想要一个 C++0x static_assert来测试给定的结构类型是否是POD(以防止其他程序员无意中用新成员破坏它)。IE,

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 的信息仍然相当零碎。

4

1 回答 1

29

<type_traits>C++0x 在头文件中为这种内省引入了类型特征库,并且有一个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 回答