如何访问该指针?

时间:2017-12-05 19:24:26

标签: c++ linked-list iterator

我有这样的事情:

template <typename T,typename K>
class Ring
{
  typedef struct Node
  {
          T data;
          K key;
          Node * next;
          Node * prev;
  };
  Node * head;
public:
   class iterator
   {
        private: 
        Node * ptr;
        friend class Ring; 
}

我想通过iterator类到Node * ptr返回get_value(iterator x)数据和键等方法。我该怎么做这个省略功能的朋友类?我想让Node * ptr无法被用户使用。

template <typename T,typename K>
K& Ring<T,K>::get_key(iterator & iter)
{
    Node * ptr = iter.ptr;
     return ptr->key;
}

我想要返回ptr-&gt;我的节点的密钥,但没有朋友类,我无法访问Node * ptr,所以我完全不知道如何访问这些值。

1 个答案:

答案 0 :(得分:0)

你应该看一下std:map,std :: unordered_map的API,看看他们是如何克服这个问题的。

如:

std::pair<const K&, T&> std::map::iterator<K, T>::iterator::operator*();

取消引用std :: map :: iterator可以引用键和值,方便地隐藏实现细节。

这种方法也适合您的容器。