C ++ is_trivially_copyable проверка - PullRequest
       34

C ++ is_trivially_copyable проверка

8 голосов
/ 14 февраля 2011

Как проверить, является ли тип C ++ тривиально копируемым? У меня есть класс, который использует функции memcpy и memcmp с указанным типом шаблона T, и я хотел бы запустить assert для типов, которые не безопасно копировать с помощью memcpy. Есть ли способ сделать это (с существующим стандартом)?

Ответы [ 3 ]

8 голосов
/ 14 февраля 2011

Нет, невозможно в C ++ 98 / C ++ 03. Именно поэтому <type_traits> был добавлен в C ++ 0x. Некоторые функции из <type_traits> могут быть реализованы в C ++ 03, часто с использованием принципа SFINAE, но некоторые, включая std::is_trivially_copyable<T>, просто потребуют встроенной поддержки компилятора.

6 голосов
/ 14 февраля 2011

Для этого в бусте доступны черты типа.

Однако вы тратите время впустую - запоминание типа не будет быстрее, чем то, что ваш оптимизатор создаст с помощью конструктора копирования, если тип является тривиально копируемым. Просто используйте конструктор копирования.

4 голосов
/ 14 февраля 2011

Ближайшая вещь boost :: is_pod <> .

...