这是代码:
#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
的朋友。但是我该怎么办呢?提前谢谢!
答案 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给出的方法必须有效,因为他正在制作你的班级朋友隐藏的地图。