2013-12-22 1 views
10

Я понимаю, что они кодируют информацию о типе, с которым вы их создаете, но как они работают? Скажите, например, черту типа std::is_class. Как он выполняет свою работу? Все реализации кажутся пустыми структурами, и я должен признать, что я почесываю голову.C++ Type Traits

Имена кажутся достаточно дескриптивными, поэтому я могу понять, что они означают, но Каковы типичные сценарии, которые используют черты типа?

Я не могу найти вводные ресурсы по этому вопросу (или вопросы по SO). Указатели будут оценены.

+0

Они могут быть реализованы компилятором (хотя они выглядят как регулярные определения шаблонов классов). Тем не менее, я думаю, что возможная реализация 'is_class' описана в« Современном дизайне C++ »Александреску. –

+1

Связанный: http://stackoverflow.com/q/20181702/420683 – dyp

ответ

6

Некоторые черты характера, такие как std::is_class, просто используют встроенный компилятор (он же встроенный). Вы не можете написать их самостоятельно без специальной поддержки от компилятора.

Характеристики типа в основном полезны в общем контексте - вы можете специализироваться на свойствах типов или накладывать ограничения на аргументы шаблона. Например, реализация std::copy может использовать std::memcpy внутренне вместо явного цикла, когда итераторы являются указателями на POD. Это может быть достигнуто с помощью SFINAE.