如何使用包含策略类型的容器创建容器迭代器?

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

【讨论】:

以上是关于如何使用包含策略类型的容器创建容器迭代器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义类中隐藏迭代器和容器实现(无增强)

Vector容器 和 iteration 迭代器

空间配置器

STL内存管理器的分配策略

如何在C ++中仅在容器内的类的成员上获取迭代器

JAVA迭代器Iterator