C++ PQXX PostgreSQL离散连接类,作用域类指针
我有一个类DBProc,它连接到PostgreSQL,并允许用户提交查询/检索结果 从功能上来说,一切都是正常的 DBProc::connect函数接受连接类型的可选参数。这三种变体是:直接、延迟、异步 我有根据用户选择实例化正确连接类的代码。我预先初始化了3个唯一的\u ptr,每个可能的连接类对应一个,然后使用switch语句选择所选的类类型 这一切都很好…但是 我倾向于使用一个类var来保存对 连接类 所有的类都有完全相同的功能,但我看不出简单的方法来实现这一点。 “auto¤tConnection=lazyConnection”在switch语句中工作正常,但在代码块之后当然超出范围C++ PQXX PostgreSQL离散连接类,作用域类指针,c++,postgresql,smart-pointers,scoping,libpqxx,C++,Postgresql,Smart Pointers,Scoping,Libpqxx,我有一个类DBProc,它连接到PostgreSQL,并允许用户提交查询/检索结果 从功能上来说,一切都是正常的 DBProc::connect函数接受连接类型的可选参数。这三种变体是:直接、延迟、异步 我有根据用户选择实例化正确连接类的代码。我预先初始化了3个唯一的\u ptr,每个可能的连接类对应一个,然后使用switch语句选择所选的类类型 这一切都很好…但是 我倾向于使用一个类var来保存对 连接类 所有的类都有完全相同的功能,但我看不出简单的方法来实现这一点。 “auto¤
如果有一种方法在块内创建一个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
...
}
“某个程序员伙计”在评论中提供的工作答案 为什么不将std::unique_ptr设置为pqxx::connection_base,这是所有连接类型的通用基类某个程序员 简化代码:
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;
}
为什么没有一个std::unique_ptr,它是所有连接类型的公共基类?Thx!我想我已经试过了,并且认为它不会起作用,因为pqxx::connection_base是一个抽象类……但是,嘿,它可以从@someprogrammer dude获得8个工作答案