Можно ли использовать черты типа, чтобы проверить, является ли тип контейнером? - PullRequest
7 голосов
/ 01 октября 2011

Могу ли я использовать C ++ Type Traits, чтобы проверить, является ли тип контейнером, подобным STL?Я уже знаю о встроенных в GCC __is_class, но я хотел бы быть более конкретным, если это возможно.

1 Ответ

4 голосов
/ 01 октября 2011

Вы можете создать свои собственные классы черт, чтобы проверить тип интерфейса Контейнера. Это может включать проверку наличия определенных связанных типов (таких как container::iterator) и проверку правильности определенных выражений (таких как container.empty()) (т.е. они компилируются без ошибок). Различные методы SFINAE могут использоваться для создания классов признаков, которые проверяют вложенные типы и проверяют выражения.

Страница SGI подробно определяет связанные типы и допустимые выражения, которые должны предоставлять типы, которые моделируют «концепцию» Контейнера. Самый последний стандартный документ ISO C ++, вероятно, предоставит более авторитетный источник, поскольку страница SGI довольно старая.

Конечно, классы черт не могут проверять семантику выражений вроде container.empty(); они могут только проверить, что выражения являются законными. В некоторых предлагается расширение языка, чтобы позволить программисту утверждать семантические свойства выражений, которые могли бы устранить это ограничение.

...