【发布时间】:2015-08-26 12:23:42
【问题描述】:
我需要以下代码:
class myclass{
private:
myclass(){}
friend myclass *make_myclass(const std::string&);
};
std::unordered_map<std::string, myclass> myclasses;
myclass *make_myclass(const std::string &str){
if(myclasses.find(str) == myclasses.end())
myclasses.emplace(str, myclass{});
return &myclasses[str];
}
但是编译这段代码会抛出一个关于myclass() 是私有的很长的错误。
所以我想我会把std::pair 安顿下来并成为朋友:
class myclass{
private:
myclass(){}
friend myclass *make_myclass(const std::string&);
friend class std::pair<std::string, myclass>;
};
std::unordered_map<std::string, myclass> myclasses;
myclass *make_myclass(const std::string &str){
if(myclasses.find(str) == myclasses.end())
myclasses.emplace(
std::piecewise_construct,
std::forward_as_tuple(str),
std::forward_as_tuple()
);
return &myclasses[str];
}
但仍然得到关于构造函数是私有的错误。
我怎样才能拥有一个类型为私有构造函数的std::unordered_map?
【问题讨论】:
标签: c++ c++14 unordered-map