我必须声明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
。