oli*_*bre 1 c++ templates typedef nested-class typename
我要声明的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)
Run Code Online (Sandbox Code Playgroud)
typedef不能用来申报Iter?为什么不?Iter内template class?(例如作为函数参数类型)编辑
在指令中typename Vec::iterator Iter;,关键字typename表示Vec::iterator是一种类型(即不是静态成员函数/属性).因此,Iter不会声明为类型,而是使用类型作为变量Vec::iterator.
typedef可以和它一起使用typename.所以它变成:
typedef typename vec::iterator Iter;
Run Code Online (Sandbox Code Playgroud)Iter现在就用吧.
template <typename T>
struct MyContainer
{
typedef std::vector<T> Vec;
typedef typename Vec::iterator Iter;
void Foo (Iter); //ok
Iter Bar (); //ok
};
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |