Typename in C++ Template

原创 2011年01月07日 17:40:00

今天调一个程序,里面用到了vector,在GDB里面看vector里面的东西一点也不直接,如果碰到vector<vector<int> >,要想看看里面的内容就更不爽了。也可能是我不知道有什么好办法,如果谁知道,麻烦告诉我一下。

没有办法,只要弄个Dump函数来看:

template <class T>
void DumpArrayArray(vector<vector<T> >& arr)
{
    cout<< "Dumping Data:" << endl;
    vector< vector<T> >::iterator outIter = arr.begin();
     for (; outIter!= arr.end(); outIter++)
     {

         vector<T>::iterator inIter = (*outIter).begin();
         for (;inIter!=(*outIter).end();inIter++){
             cout << *inIter << "t";
         }
         cout << endl;
     }
}

猜猜GCC报什么错来着,其实我估计Visual Studio也会报一样的错,编译错哦:

clsAggregateGroups.cpp:In function ‘void DumpArrayArray(std::vector<std::vector<T, std::allocator<_CharT> >, std::allocator<std::vector<T, std::allocator<_CharT> > > >&)’:

clsAggregateGroups.cpp:38: error: expected `;’ before ‘outIter’

见鬼,我明明定义了vector<vector<T> >::iterator outIter的啊,后来我让开林帮我看看,他一离开座位,我就想起来了,这是typename的问题。当我们使用类型推导的时候 vector<vector<T> >::iterator , C++编译器没有办法肯定这个iterator是类型呢,还是变量?所以需要程序员明确的告诉编译器,以前我看STL源码解析的时候看到过的。

所以我应该改成:typename vector<vector<T> >::iterator outIter; 这样编译就过了。

相关文章推荐

C++ - 模板(template)中typename的使用方法

模板(template)中typename的使用方法 http://blog.csdn.net/caroline_wendy/article/details/23910709 声明templ...

C++中template<class T> && template <typename T>(模板区分)

问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?  template class Widget; // use...

How to get a type in C++ when its template argument is the argument

First, we can't do : //It's wrong. template U TypeFunc (U p); template U TypeFunc2();//either i...

模板(template)中typename的使用方法

声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(depen...
  • darennet
  • darennet
  • 2014年11月09日 16:10
  • 16771

template关键字typename和class的区别,以及模板默认参数

template关键字typename和class的区别问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template cla...

Why C++ Supports typename and class.txt

  • 2010年12月17日 14:57
  • 6KB
  • 下载

从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

一、缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: tem...

了解 C++ 之 typename

typename与class都可以用作模板形参定义的关键字,两者无异~~ 可是,typename的用途并非仅限于此,如下面的代码: template void print(const C & ...

C++箴言:理解typename的两个含义1

templateclassT> class Widget; // uses "class" templatetypenameT> class Widget; // uses "typena...

C++的typename

1.模板参数列表中与class关键字可相互替换template template 是一样的2.嵌套从属名称(nested dependent names) 假如template内出现的名称如果依赖...
  • mlyjqx
  • mlyjqx
  • 2017年02月26日 09:53
  • 116
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Typename in C++ Template
举报原因:
原因补充:

(最多只允许输入30个字)