テンプレートタイプのイテレータのSTLオブジェクトを作成するにはどうすればよいですか?以下のようなテンプレートタイプのイテレータのSTLオブジェクト(たとえばVector)を作成しようとしています。
vector<vector<T>::iterator> it1;
これは、g++とVC++の両方で失敗します。どちらのコンパイラもほぼ同じことを言っています
g ++
Main.cpp:8:49: error: type/value mismatch at argument 1 in template parameter li
st for `template<class _T1, class _T2> struct std::pair'
Main.cpp:8:49: error: expected a type, got `std::vector<T>::iterator'
VC ++
error C2923: 'std::vector' : 'std::vector<T>::iterator' is not a valid template type argument for parameter '_Ty'
コンクリートタイプのイテレータを作成している場合は、コース外で、たとえばそれは機能します
vector<vector<int>::iterator> it1;
これが最小の失敗例です
#include<vector>
#include<iterator>
using namespace std;
template<typename T>
class Spam {
public:
vector<vector<int>::iterator> it1; #Compiles Fine
vector<vector<T>::iterator> it2; #Fails
};
ノート
回答から私が理解したのは、タイプが依存している場合、キーワードの接頭辞を付ける必要があるということtypename
です。もしそうなら、
vector< vector<T> > it;
失敗するはずですが、失敗しません。依存typename
する名前がtypedef