我有这样的事情:
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,所以我完全不知道如何访问这些值。
答案 0 :(得分:0)
你应该看一下std:map,std :: unordered_map的API,看看他们是如何克服这个问题的。
如:
std::pair<const K&, T&> std::map::iterator<K, T>::iterator::operator*();
取消引用std :: map :: iterator可以引用键和值,方便地隐藏实现细节。
这种方法也适合您的容器。