【问题标题】:How to get access to that pointer?如何访问该指针?
【发布时间】:2018-05-19 13:26:56
【问题描述】:

我有这样的东西:

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; 
}

我想通过迭代器类到 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-> 键,但是没有朋友类我无法访问 Node * ptr ,所以我完全不知道如何访问该值。

【问题讨论】:

  • 你能提供一个你想写的代码sn-p吗?
  • 我已经更新了对主要问题的回答:)
  • 为什么要避开朋友圈?如果我无法访问它的ptr,我将如何构造这样的迭代器?
  • 对于我来说get_keyRing 的成员也没什么意义,因为它只返回iterator.ptr-&gt;key,这与Ring 有什么关系?
  • private: //protected:?

标签: c++ linked-list iterator


【解决方案1】:

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

如:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    相关资源
    最近更新 更多