2017-01-24 8 views
0

からクラスメンバのタイプを使用し、私のような複合型で宣言された変数、お持ちの場合:は、ローカル変数

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

をメインクラス型のサブタイプを使用して変数を宣言する方法はあります?

私はこのような何かをしたいと思います:

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

しかし、これは有効なC++ではありません。

私は他の選択肢がいることを知っている:

  • 自動、私は、コードのunreadabilityを含む多くの理由から、それを避けるようにしてください。変数の型が何であるかを簡単に把握することはできません(反復子ですか?ペア?ポインタ?)。この問題は、上記の方法では発生しません。
  • 第一のタイプのtypedef
  • が、上記の方法を働いていた場合、私はこれを行う方法があり、それはより簡潔になり、コードが

非常に明確だと思いますか?

+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よりも読みやすいかどう私が主張するだろう。変数から型を推論する別の方法はないと思います。