У меня есть DataType для определения пользователем, это может быть int, vector<int>, vector<vector<int> >
... Я хочу знать, есть ли какие-либо шаблонные трюки, чтобы получить тип int? Я предпочитаю использовать метод C++ 11, потому что моя версия g ++ 4.1.2, и я не могу ее обновить.Как получить тип элемента в векторе вложенности?
1
A
ответ
5
Это работает на GCC 4.3, который является самой ранней версией GCC. У меня есть легкий доступ. Вам нужно будет проверить, работает ли это с 4.1.2.
template<class T> struct voider { typedef void type; };
template<class T, class = void>
struct data_type {
typedef T type;
};
template<class T>
struct data_type<T, typename voider<typename T::value_type>::type>
: data_type<typename T::value_type> {};
Вы можете использовать его как, например,
typename data_type<DataType>::type meow;
// type of 'meow' is int if DataType is vector<vector<int> >, or vector<int>, or int
Это использует the void_t
trick и работает со всем, что определяет value_type
ЬурейеЕ. Выгода заключается в том, что он работает из коробки для std::vector<std::deque<std::list<int> > >
; недостатком является то, что это может быть слишком много (data_type<std::vector<std::string> >::type
- char
).
Если вы просто хотите работать с векторами, вы можете сделать:
template<class T>
struct data_type {
typedef T type;
};
template<class T, class A>
struct data_type<std::vector<T, A> >
: data_type<T> { };
// partially specialize for other containers if wanted
Смежные вопросы
- 1. Как получить тип элементов в векторе?
- 2. Как указать тип элемента в векторе sbcl (или общий lisp)?
- 3. Перемещение элемента в векторе
- 4. Как получить положение определенного элемента в векторе строк, использовать его как индекс в векторе ints?
- 5. Поиск элемента в векторе
- 6. Как получить ранг элемента в векторе в C++
- 7. Доступ STRUCT элемента в векторе
- 8. jQuery - получить тип элемента
- 9. Код вложенности внутри элемента ввода
- 10. Как получить индекс элемента в векторе, используя арифметику указателя?
- 11. Получить тип элемента в Hpricot
- 12. Удаление элемента в векторе по значению
- 13. Flexbox: Обтекание элемента без вложенности
- 14. Как получить самый близкий элемент в векторе для каждого элемента в другом векторе без дубликатов?
- 15. Получить выбранный тип элемента
- 16. Проверка наличия элемента в векторе
- 17. найти индекс элемента в векторе
- 18. Как получить тип элемента массива в OCaml
- 19. Как получить тип элемента в xpath?
- 20. Удаление элемента в векторе указателя
- 21. Поиск элемента в векторе структур
- 22. Изменение элемента в векторе структур
- 23. Как найти индекс элемента в векторе?
- 24. Как получить элементы в векторе в ArrayList
- 25. Нахождение вероятности возникновения каждого элемента в векторе
- 26. получить тип элемента неоднородной контейнеры
- 27. Попытка выставить каждый элемент в векторе столбца из первого элемента и получить результаты в векторе столбца
- 28. Получить индексы последнего элемента каждого прогона в векторе
- 29. Получить тип элемента, который сфокусирован
- 30. Изменить значение элемента строки в векторе
Это немного сложно для меня. Не могли бы вы дать мне пример о том, как использовать для 'vector>', и как он делает трюки? –
maple