如何让我的私有类对STD容器可见?

时间:2010-07-10 06:06:31

标签: c++

这是代码:

#include <map>
class Hidden {
private:
  friend class Visible;
  Hidden(); { /* nothing */ }
};
class Visible {
public:
  void f() {
    std::map<int, Hidden> m;
    m[1] = Hidden(); // compilation error, class Hidden is private
  }
};

代码无法编译,因为类Hidden的构造函数对于类std::map是私有的。显然,我不想让std::map成为Hidden的朋友。但是我该怎么办呢?提前谢谢!

2 个答案:

答案 0 :(得分:2)

将地图添加为朋友类:

#include <map>
class Hidden {
private:
  friend class Visible;
  friend class std::map<int, Hidden> ;
  Hidden() {}
};
class Visible {
public:
  void f() {
    std::map<int, Hidden> m;
    m[1] = Hidden(); // compilation error, class Hidden is private
  }
};

当然,这意味着您必须在Hidden中声明所有隐藏用户,但这正是您正在使用的“私有类”模式的重点......

答案 1 :(得分:0)

对于你的隐藏类,map只是另一个类,除非你明确地将地图设为Hidden的朋友,否则它的地图将无法访问Hidden的构造函数。

paercebal给出的方法必须有效,因为他正在制作你的班级朋友隐藏的地图。