gpt4 book ai didi

c++ - 具有依赖范围的嵌套模板

转载 作者:IT老高 更新时间:2023-10-28 12:03:23 31 4
gpt4 key购买 nike

什么是依赖范围,在以下错误的上下文中 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;
}

最佳答案

编译器准确地告诉了你要做什么。写typename之前 ptrModel<std::vector<Data> >::Type ,就像这样:

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

这个要求的原因是编译器此时不知道 ptrModel<std::vector<Data> >::Type描述成员变量或嵌套类型。它甚至无法通过查看 ptrModel 的定义来弄清楚。因为可能有 ptrModel 的特化对于 std::vector<Data>程序中尚未到达的其他地方会更改其中的哪些内容::Type指。所以你需要明确地告诉它。

姓名ptrModel<std::vector<Data> >::Type有一个“依赖范围”,因为它在一个依赖模板实例化的范围内。

关于c++ - 具有依赖范围的嵌套模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3311633/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com