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

时间:2011-05-10 19:33:40

标签: c++ pod

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

3 个答案:

答案 0 :(得分:25)

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

static_assert(std::is_pod<YourStruct>::value);

答案 1 :(得分:9)

你可以在静态断言中使用boost type_traits库,尤其是boost::is_pod<T>::value

答案 2 :(得分:5)

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