Как получить типы в пакете параметров С++ 11?

Я не уверен, что сформулировал вопрос наиболее эффективным образом, но я только сейчас начинаю использовать С++ 11, и у меня возникают проблемы с применением его новых функций к рассматриваемой проблеме. У меня есть следующая условная функция:

template <typename ... Args>
std::vector<std::type_index> foo()

Я хотел бы, чтобы foo() возвращал vector, содержащий значение type_index для каждого из типов в пакете параметров Args. Например, foo<int, vector<int>, double>() вернет vector, содержащее { type_index(typeid(int)), type_index(typeid(vector<int>)), type_index(typeid(double)) }.

Условно я хотел бы перебрать типы в пакете и вызвать приведенное выше преобразование для каждого из них (т.е. учитывая тип T, вернуть type_index(typeid(T)). Я чувствую, что должен быть чистый способ сделать это, но не ясно, как это сделать). мне, как работать с механизмом вариативных шаблонов, чтобы это работало. Верна ли моя интуиция?


person Jason R    schedule 15.07.2014    source источник


Ответы (1)


Самый простой способ «перебирать» типы в пакете — использовать расширение пакета для повторения желаемого шаблона. В этом случае вы должны написать что-то вроде следующего:

return { type_index(typeid(Args))... }
person R. Martinho Fernandes    schedule 15.07.2014
comment
Превосходно! Я не представлял, что это будет настолько просто. Спасибо! - person Jason R; 15.07.2014