在c ++/c ++ 11中测试"POD-ness"?

cwm*_*wm9 6 c++ types pod c++11

我有一些代码,它采用打包的POD结构/类并将其复制到内存块中.

struct A
{
   int a;
   int b;
} a;

memcpy(mymemoryblock, (void *)&a, sizeof(A));

// later I get a reply and...

memcpy((void *)&a, mymemoryblock, sizeof(A));
Run Code Online (Sandbox Code Playgroud)

这仅适用于POD类型的数据,如果有一种方法可以测试POD-ness,我想知道什么.如果有人不小心将成员函数添加到此类,则memcpy操作将变为无效,但仍可编译.这导致很难检测到错误.

是否有一个is_POD_type(A)函数,或者可以用来在运行时或编译时检测PODness的其他技巧?

Ste*_*sop 14

std::is_pod<A>::value 在C++ 11中.

[编辑:请参阅上面的Luc的评论,在C++ 11中,你不需要为你正在做的事情提供POD类型.

对于这个问题,你也不需要投射void*,并且void*不必要的C风格投射指针有点风险,因为有一天你会const被意外抛弃!]

在C++ 03中没有标准的方法可以做到这一点,但Boost有自己的is_pod错误,因为编译器没有提供非标准的查找方法.因此,如果您编写POD特例是优化的代码,那么它很有用(您无法在任何地方获得优化).如果您只关心Boost可以获得准确答案的编译器,这也很有用.如果误报is_pod导致你的代码厌恶地放弃,那就不太好了.