【发布时间】:2020-05-19 09:18:49
【问题描述】:
我喜欢使用私有默认构造函数将对象放置到地图中。所以发现下面的代码不起作用:
class DB {
public:
DB(std::string user, std::string password,
std::string db, std::string host, unsigned int port = 3306);
static DB& instance(
std::string const& session_name,
std::string const& user = "user",
std::string const& password = "password",
std::string const& db = "database",
std::string const& host = "localhost",
unsigned int port = 3306) {
auto instance = database_instances.find(session_name);
if (instance == database_instances.end()) {
//database_instances.emplace(session_name, user, password, db, host, port);
//database_instances.insert( std::unordered_map< std::string, DB >::value_type ( session_name, DB{user, password, db, host, port}));
database_instances.emplace(std::piecewise_construct,
std::forward_as_tuple(session_name),
std::forward_as_tuple(user, password, db, host, port));
}
return database_instances[session_name];
}
static std::shared_ptr<DB> instance(
std::string const& session_name);
static DB& instance();
~DB() = default;
private:
DB() = default;
DB(const DB& );
DB & operator = (const DB &);
/** fields: user, password ... **/
static std::map<std::string, DB> database_instances;
};
在 C++ 中有没有办法使用私有默认构造函数来做到这一点?
【问题讨论】:
-
您收到的错误信息是什么?