C++ C++;17无默认构造函数的地图放置(专用默认构造函数)
我喜欢将对象放置到带有私有默认构造函数的映射中。因此,请找出以下代码不起作用:C++ C++;17无默认构造函数的地图放置(专用默认构造函数),c++,c++17,stdmap,C++,C++17,Stdmap,我喜欢将对象放置到带有私有默认构造函数的映射中。因此,请找出以下代码不起作用: 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_n
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;
};
classdb{
公众:
DB(标准::字符串用户,标准::字符串密码,
std::string数据库,std::string主机,无符号int端口=3306);
静态数据库&实例(
std::字符串常量和会话名称,
std::string const&user=“user”,
std::string const&password=“password”,
std::string const&db=“数据库”,
std::string const&host=“localhost”,
无符号整数端口=3306){
自动实例=数据库\实例.find(会话\名称);
if(instance==数据库_instances.end()){
//数据库实例。安放(会话名称、用户、密码、数据库、主机、端口);
//数据库实例.insert(std::无序映射::值类型(会话名称,DB{user,password,DB,host,port}));
数据库_实例.emplace(std::分段_构造,
std::转发作为元组(会话名称),
std::转发作为元组(用户、密码、数据库、主机、端口));
}
返回数据库_实例[会话_名称];
}
静态std::共享的ptr实例(
std::字符串常量和会话名称);
静态数据库&实例();
~DB()=默认值;
私人:
DB()=默认值;
DB(const DB&);
DB&运算符=(const DB&);
/**字段:用户、密码**/
静态std::map数据库_实例;
};
C++中有没有一种方法可以使用私有默认构造函数来实现?
你确定给出错误的行不是这个: return database_instances[session_name];
而不是调用emplace
如果映射中不存在键,该行将尝试默认构造一个值
DB
。是否确定给出错误的行不是这一行:
return database_instances[session_name];
而不是调用emplace
如果映射中不存在键,该行将尝试默认构造一个值
DB
。您得到的错误消息是什么?您得到的错误消息是什么?