我有一個類,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