C++以编程方式检测POD-struct的任何方法?

lig*_*dee 18 c++ pod

我有存储POD结构的数据结构(每个实例仅存储一个类型,因为它基本上是一个特定POD结构的数组).有时候另一个开发 将修改其中一个结构,添加或修改数据类型.如果添加了非POD元素,例如std :: string,则数据结构在运行时会爆炸,因为内存模型会发生变化.有没有办法在运行时使用编译器定义或调用来检测类或结构是否符合POD(以避免此维护问题)?我正在使用g ++(GCC)4.2.4.

Cat*_*lus 25

在运行时可能没有,但在编译时,您可以使用is_pod来自C++ 0x标准库或Boost.TypeTraits的特征.

static_assert(std::is_pod<YourStruct>::value);
Run Code Online (Sandbox Code Playgroud)


Dav*_*eas 9

您可以使用boost type_traits库,特别是boost::is_pod<T>::value在静态断言中.


Öö *_*iib 5

如果你没有boost或C++ 0x那么你可以使用一些事实,比如C++不允许使用非POD作为union的成员.