我有一个类DBProc,它与PostgreSQL建立连接,并允许用户提交查询/检索结果。从功能上讲,一切正常。DBProc::connect()函数采用可选参数作为连接类型。这3种变体是:直接,惰性,异步。我有根据用户的选择实例化正确的连接类的代码。我预先初始化3个unique_ptr ,每个可能的连接类初始化一个,然后使用switch语句选择所选的类类型。这一切都很好...但是 我的喜好是拥有一个var类,其中包含对连接类(所有类都具有完全相同的功能),但我认为没有简单的方法可以做到这一点。 'auto&currentConnection = lazyConnection'在switch语句中可以正常工作,但是当然超出了代码块之后的范围。如果有一种方法可以在一个块内创建一个var并允许在块外看到它,而无需首先声明它,那将奏效,但我认为这在c++中是不可能的。我不能首先声明它,因为所有这些类都需要在声明时进行初始化。所以... c++ atch 22 ;-)因此,每次需要使用连接时,都需要一个switch语句来选择正确的指针。我看过模板,并集,外部元素,但看不到使用这些模板的方法。如果有人知道是否有办法做到这一点,请描述。这是func类的代码片段:bool DBProc::connect(ConnectionType type) {...unique_ptr<pqxx::connection> connect;unique_ptr<pqxx::lazyconnection> lzy_connect;unique_ptr<pqxx::asyncconnection> async_connect;try{ switch (type) { case ConnectionType::direct : { connect = make_unique<pqxx::connection>(connOpts); break; } case ConnectionType::lazy : { lzy_connect = make_unique<pqxx::lazyconnection>(connOpts); break; } case ConnectionType::async : { async_connect = make_unique<pqxx::asyncconnection>(connOpts); break; }} catch ...} 最佳答案 “一些程序员伙计”在评论中提供的工作答案 Why not have a std::unique_ptr to pqxx::connection_base which is the common base class for all connection types? – Some programmer dude 简化代码:unique_ptr<pqxx::connection_base> base_connect;try{ switch (type) { case ConnectionType::direct : { base_connect = make_unique<pqxx::connection>(connOpts); break; } case ConnectionType::lazy : { base_connect = make_unique<pqxx::lazyconnection>(connOpts); break; } case ConnectionType::async : { base_connect = make_unique<pqxx::asyncconnection>(connOpts); break; } default: error += "No valid connection type supplied (direct | lazy | async)"; return false; break; }关于c++ - C++ pqxx Postgresql离散连接类,作用域指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44508923/
10-16 03:51