1
可能性の重複は:
Where and why do I have to put the “template” and “typename” keywords?
使用する - C++ 11例
これはStroustroup's FAQから再生されます。あなたがタイプを知らないときに使用されるtypename、例えば、テンプレートtemplate <typename> class some_class
を見ました。下の例でtypenameが使われているのはなぜですか?
template<class T> void printall(const vector<T>& v)
{
for (auto p = v.begin(); p!=v.end(); ++p)
cout << *p << "\n";
}
In C++98, we'd have to write
template<class T> void printall(const vector<T>& v)
{
for (typename vector<T>::const_iterator p = v.begin(); p!=v.end(); ++p)
cout << *p << "\n";
}
したがって、反復子はコンテナの種類だけでなく、それが保持するものにも依存します。ベクトルの反復子はベクトルの反復子とは異なりますか? –
ベクトルは完全に指定されているので、コンパイラはその時点で他の型のように使用できます。 –
@GuyMontag - コンパイラは 'ベクトル :: const_iterator'が型であることを全く知りません。これはメソッドまたは静的データメンバである可能性があり、コンパイラは 'vector'テンプレートから具体的な型を作成するまで知らないでしょう。 –