Предположим, я хочу создать шаблонную функцию, которая возвращает первый элемент любого stl-контейнера. Общий способ:Как проверить, является ли параметр шаблона парой ассоциативных контейнеров?
template<typename Container>
Container::value_type first(Container c){
return *(c.begin());
}
Это работает для векторов, списков, требований и т. Д.
Однако для пары ассоциативных контейнеров (станд :: карта), если хотели бы иметь
return c.begin()->second;
Как я мог проверить (в функции или специализации шаблона), если у меня есть пара ассоциативный контейнер?
Контейнер STL, похоже, не имеет никаких признаков. Можно ли проверить, имеет ли он :: key_type?
Хороший ответ. Чтобы получить его для компиляции, ';' отсутствуют в конце structs и .front() не работает для всего –
Oups, это то, что вы получаете от ответа слишком быстро: я добавил отсутствующий ';' и заменил 'front' на разыменованные 'begin' :) –