C++ 如何使我的私有类对STD容器可见?

C++ 如何使我的私有类对STD容器可见?,c++,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 }

代码如下:

#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
  }
};
#包括
隐藏类{
私人:
好友类可见;
隐藏();{/*无*/}
};
类可见{
公众:
void f(){
std::map m;
m[1]=Hidden();//编译错误,隐藏的类是私有的
}
};

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

将地图添加为好友类:

#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
  }
};
#包括
隐藏类{
私人:
好友类可见;
朋友类std::map;
隐藏(){}
};
类可见{
公众:
void f(){
std::map m;
m[1]=Hidden();//编译错误,隐藏的类是私有的
}
};

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

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


paercebal给出的方法必须起作用,因为他正在隐藏你们班的朋友map。

“你们在这里干什么?”是正确的问题。守则的目的是甚么?没有办法:
map
需要能够构建
隐藏的
@aaa:我没有将模板映射声明为朋友。仅将其实例化为[int,Hidden]的映射。因此,不存在可移植性问题。