Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ PQXX PostgreSQL离散连接类,作用域类指针_C++_Postgresql_Smart Pointers_Scoping_Libpqxx - Fatal编程技术网

C++ PQXX PostgreSQL离散连接类,作用域类指针

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¤

我有一个类DBProc,它连接到PostgreSQL,并允许用户提交查询/检索结果

从功能上来说,一切都是正常的

DBProc::connect函数接受连接类型的可选参数。这三种变体是:直接、延迟、异步

我有根据用户选择实例化正确连接类的代码。我预先初始化了3个唯一的\u ptr,每个可能的连接类对应一个,然后使用switch语句选择所选的类类型

这一切都很好…但是

我倾向于使用一个类var来保存对 连接类

所有的类都有完全相同的功能,但我看不出简单的方法来实现这一点。 “auto¤tConnection=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
    ...
}

“某个程序员伙计”在评论中提供的工作答案

为什么不将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个工作答案