C ++ Любой способ программно обнаружить POD-структуру? - PullRequest
18 голосов
/ 10 мая 2011

У меня есть структура данных, в которой хранятся POD-структуры (в каждом экземпляре хранится только один тип, поскольку в основном это массив конкретной POD-структуры). Иногда другой разработчик изменит одну из этих структур, добавив или изменив тип данных. Если элемент не POD добавлен, например, std :: string, структура данных разрушается во время выполнения, потому что модель памяти изменяется. Есть ли способ определить, является ли класс или структура POD-совместимым, используя определения компилятора или вызов во время выполнения (чтобы избежать этой проблемы сопровождения)? Я использую g ++ (GCC) 4.2.4.

Ответы [ 3 ]

25 голосов
/ 10 мая 2011

Во время выполнения, вероятно, нет, но во время компиляции вы можете использовать черту is_pod из стандартной библиотеки C ++ 0x или Boost.TypeTraits .

static_assert(std::is_pod<YourStruct>::value);
9 голосов
/ 10 мая 2011

Вероятно, вы можете использовать библиотеку boost type_traits и, в частности, boost::is_pod<T>::value в статическом утверждении.

5 голосов
/ 10 мая 2011

Если у вас нет boost или C ++ 0x, то вы, возможно, можете использовать какой-то факт, подобный тому, что C ++ не позволяет использовать non-POD в качестве члена union.

...