C++ 模板中的Typedef导致阴影模板参数错误
我有一个模板类,我在其中使用typedef声明一个映射,如下所示:C++ 模板中的Typedef导致阴影模板参数错误,c++,templates,typedef,C++,Templates,Typedef,我有一个模板类,我在其中使用typedef声明一个映射,如下所示: #include <map> template <typename T> class LocalStub { typedef std::map<T, T> QueryMap; typedef std::pair<T, T> QueryPair; typedef QueryMap::iterator QueryMapIterator; public: LocalS
#include <map>
template <typename T> class LocalStub {
typedef std::map<T, T> QueryMap;
typedef std::pair<T, T> QueryPair;
typedef QueryMap::iterator QueryMapIterator;
public:
LocalStub();
~LocalStub();
void AddQuery(const T &, const T &);
const T &Answer(const T &) const;
private:
QueryMap _queryMap;
};
我做错了什么?我不明白为什么会出现这样的错误。您忘记用
QueryMapIterator
编写关键字typename
。以下是更新版本:
template <typename T> class LocalStub {
typedef std::map<T, T> QueryMap;
typedef std::pair<T, T> QueryPair;
typedef typename QueryMap::iterator QueryMapIterator;
public:
LocalStub();
~LocalStub();
void AddQuery(const T &, const T &);
const T &Answer(const T &) const;
private:
QueryMap _queryMap;
};
模板类LocalStub{
typedef std::map QueryMap;
typedef std::pair QueryPair;
typedef typename QueryMap::迭代器QueryMap操作符;
公众:
LocalStub();
~LocalStub();
void AddQuery(常量T&,常量T&);
常数T和应答(常数T和)常数;
私人:
QueryMap _QueryMap;
};
此要求的原因是编译器此时不知道
querymapierator
是描述成员变量还是嵌套类型TL;DR-typedef-typename查询映射::迭代器查询映射器代码>
较长版本:
QueryMap::iterator
是一个,因此需要在typedef
对其进行初始化之前使用typename
。依赖项名称问题源于这样一个事实,即在模板构造type::something
中,something
可能引用类型、值或函数,如下例所示:
template<class T>
struct foo{
void bar(){ T::something; }
};
struct baz{
using something = int;
};
struct bez{
static const int something = 0;
};
模板
结构foo{
void bar(){T::something;}
};
结构baz{
使用某物=int;
};
结构bez{
静态常数int某物=0;
};
因此,如果要传递的名称引用类型,则需要使用typename
向编译器提供附加信息。=>typedef typename QueryMap::iterator querymapierator代码>@AMA请原谅我的问题,但我为什么要添加typename>您应该查看。谢谢您的回答。在这种情况下,我为什么要添加typename?我已经更新了答案
template<class T>
struct foo{
void bar(){ T::something; }
};
struct baz{
using something = int;
};
struct bez{
static const int something = 0;
};