Iter
私はとして宣言する必要がありますtypename
が、ありませんtypedef
。
次に、宣言で使用できませんIter
= template
class
>イライラします:(
使用方法を教えてくださいIter
、またはC++がとても厄介な理由を説明してください...
template <typename T>
struct MyContainer
{
typedef std::vector<T> Vec;
typename Vec::iterator Iter;
void Fo (typename std::vector<T>::iterator); //ok
typename std::vector<T>::iterator Ba(); //ok
void Foo (Iter); //error: 'Iter' is not a type
Iter Bar (); //error: 'Iter' does not name a type
}; //(gcc 4.1.2)
- なぜ
typedef
宣言に使用できないのIter
ですか?なぜだめですか? Iter
内での使用方法はtemplate
class
?(例えば、関数パラメータタイプとして)
編集
命令typename Vec::iterator Iter;
でキーワードtypename
が言うVec::iterator
のはタイプです(つまり、静的メンバー関数/属性ではありません)。したがって、は型としてでIter
はなく、型を使用する変数として宣言されますVec::iterator
。