我有一个类,DBProc,这使得到PostgreSQL的连接,并允许用户提交查询/检索的结果。C++ pqxx的PostgreSQL离散连接类,确定范围类指针
功能上,一切正常。
的DBProc ::连接()函数用于连接类型的可选参数。 3个变体是:直接,懒惰,异步。
我有一个根据用户的选择实例正确的连接类代码。我预先初始化了3个unique_ptr <>,每个可能的连接类一个,然后使用switch语句选择所选的类类型。
这一切工作正常...但
我更倾向于将有一类变种保存到 参考连接类
(所有的类具有完全相同的功能) ,但我认为没有简单的方法来做到这一点。 'auto & currentConnection = lazyConnection'在switch语句中正常工作,但当然会在代码块之后超出范围。
如果有一种方式来创建一个块内的变种,并允许它的块外可以看到,没有第一次宣布它,将工作,但我不相信这是可能在C++中。
,因为所有这些类需要在声明初始化我不能先声明它。 所以... C++ atch 22 ;-)
所以,每次我需要使用连接,我需要一个switch语句来选择正确的指针。
我已经看了模板,工会,extern和不明白的方式与任何这些做到这一点。
如果有人知道是否有办法做到这一点,请描述。
这里的类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
...
}
为什么不能有'的std :: unique_ptr'为['pqxx :: connection_base'(http://pqxx.org/devprojects /libpqxx/doc/4.0/html/Reference/a00023.html),它是所有连接类型的通用基类? –
Thx!以为我曾尝试过,并认为它不会工作,因为pqxx :: connection_base是一个抽象类...但是,嘿,它的工作原理8-) – bigswifty
@Some程序员哥们 – bigswifty