Подтвердить что ты не робот

С++ Любой способ программно обнаружить POD-структуру?

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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