typename介绍 - c++函数别名



依赖范围的嵌套模板 (1)

编译器告诉你到底该怎么做。 在ptrModel<std::vector<Data> >::Type之前写入ptrModel<std::vector<Data> >::Type ,如下所示:

 typedef typename ptrModel<std::vector<Data> >::Type Type;

这个要求的原因是编译器此时不知道ptrModel<std::vector<Data> >::Type描述成员变量还是嵌套类型。 它甚至无法通过查看ptrModel的定义来解决ptrModel因为可能存在ptrModelstd::vector<Data>程序中其他地方的特殊情况,它尚未得到,但哪些更改了这些东西::Type指的是。 所以你需要明确地告诉它。

名称ptrModel<std::vector<Data> >::Type具有“依赖范围”,因为它位于依赖于模板实例化的范围内。

什么是依赖范围,以及在以下错误的上下文中typename的含义是什么?

$ make
g++ -std=gnu++0x main.cpp
main.cpp:18:10: error: need 'typename' before 'ptrModel<std::vector<Data> >::Type' because 'ptrModel<std::vector<Data> >' is a dependent scope
make: *** [all] Error 1


/*
 * main.cpp
 */

#include <vector>
#include <memory>

template<typename T>
struct ptrModel
{
 typedef std::unique_ptr<T> Type;
};


template<typename Data>
struct ptrType
{
 typedef ptrModel< std::vector<Data> >::Type Type;
};

int main()
{
 return 0;
}




nested