2017-01-24 2 views
0

Если у меня есть переменная, объявленная со сложным типом, например:Используйте тип элемента класса из локальной переменной

std::unordered_map<PathKey,unsigned int> childDict; 

Есть ли способ, чтобы объявить переменные с использованием подтипов основного типа класса ?

Я хотел бы сделать что-то такое, как:

childDict::iterator iter = childDict.begin(); 

Но это не действует с ++.

Я знаю, что есть и другие варианты:

  • авто, но я стараюсь избегать его по многим причинам, в том числе unreadability кода. Вы не можете легко понять, что такое тип переменной (это итератор? Пара? Указатель?). Эта проблема отсутствует с указанным выше методом.
  • ЬурейеГо типа первого, но если выше метод работал, я думаю, было бы более краткими и код будет очень ясно

Есть ли способ сделать это?

+2

'decltype (childDict) :: iterator'? –

+4

На мой взгляд, инструмент должен соответствовать вашим потребностям, а не адаптироваться к инструменту. Это означает, что если ваша среда IDE не позволяет использовать авто, вам следует искать другую среду IDE. И используйте auto. – Rene

+0

Любопытно, какая IDE вы используете, у которой есть проблемы с «авто»? – roalz

ответ

0

C++ 11 decltype() будет работать:

#include <vector> 
struct A { 
    vector<int> v; 
    void f() { 
     decltype(v)::iterator i = v.begin(); 
    } 
}; 

int main() { 
    return 0; 
} 

я бы поспорил, если это более читабельным, чем auto, хотя это почти точно синтаксис желаниях. Я не думаю, что есть другой способ вывести тип из переменной.

Смежные вопросы