Как получить тип элемента из экземпляра контейнера STL?

Я знаю о value_type, key_type … но они работают с типами, а не с экземплярами.
Я старался
такие вещи, как:

std::set<uint64_t> mySet;

decltype (mySet)::value_type pos;

Но это не работает.

РЕДАКТИРОВАТЬ: я использую VS 2010.

РЕДАКТИРОВАТЬ 2: целью этого кода было получить тип, чтобы дать ему boost :: lexical_cast<>
Есть ли обходной путь, который позволяет это?
Я хочу что-то вроде этого:

   mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));
// it is a iterator in vector of strings

EDIT3: это работает:

mySet.insert(boost::lexical_cast<decltype(mySet)::value_type>(*it));

11

Решение

decltype (mySet)::value_type верно. Убедитесь, что в вашем компиляторе включен режим C ++ 11. Если да, то это ошибка компилятора.

Возможный обходной путь включает использование метафункции идентичности:

template <typename T>
struct identity { typedef T type; };

identity<decltype(mySet)>::type::value_type pos;
16

Другие решения

Я бы сделал это наоборот:

typedef std::set<uint_least64_t> set_type;
set_type mySet;
set_type::value_type pos;
6

Вот простой пример метода печати, который печатает элементы очереди с приоритетами:

template<typename T> void print_queue(T& queue) {
while (!queue.empty()) {
std::cout << queue.top() << " ";
queue.pop();
}
std::cout << '\n';
}

Проблема в том, что после печати всех элементов очередь пуста.
Для восстановления очереди в исходное состояние мы добавляем векторный контейнер. Тип
элементов очереди выводится из очереди:

template<typename T> void print_queue(T& queue) {
std::vector<T::value_type> vec;
while (!queue.empty()) {
std::cout << queue.top() << " ";
vec.push_back(queue.top());
queue.pop();
}
std::cout << '\n';
for (auto & v : vec) {
queue.push(v);
}
}
0
По вопросам рекламы [email protected]