如何使用包含策略类型的容器创建容器迭代器?
Posted
技术标签:
【中文标题】如何使用包含策略类型的容器创建容器迭代器?【英文标题】:How can I create a container iterator with the container holding a policy type? 【发布时间】:2011-02-15 19:13:41 【问题描述】:我有以下代码:
#include <map>
#include <string>
class policy1
public:
struct data
;
;
template<typename policy>
class policy_user : public policy
typedef std::map<std::string, typename policy::data> mymap; // good
typedef std::map<std::string,
typename policy::data >::iterator myiterator; // bad
typedef mymap::iterator myseconditerator; // also bad
;
失败了:
der.cpp:17: error: type ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data> > >’ is not derived from type ‘policy_user<policy>’
der.cpp:17: error: expected ‘;’ before ‘myiterator’
der.cpp:18: error: type ‘std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, typename policy::data> > >’ is not derived from type ‘policy_user<policy>’
der.cpp:18: error: expected ‘;’ before ‘myseconditerator’
我也不知道为什么。有什么帮助我可以完成我尝试做的事情(创建一个迭代器)吗?
【问题讨论】:
【参考方案1】:你在 typedefs 中忘记了typename
。
写:
typedef typename std::map<std::string, typename policy::data >::iterator myiterator;
typedef typename mymap::iterator myseconditerator;
现在。没关系。 typename
是必需的,因为 iterator
是 dependent name。另见this
【讨论】:
以上是关于如何使用包含策略类型的容器创建容器迭代器?的主要内容,如果未能解决你的问题,请参考以下文章