簡體   English   中英

在構造函數初始化列表中使用 std::variant

[英]Using std::variant in constructor initialization list

我正在嘗試使用std::variant來概括我的一些代碼。 但是,我在調用構造函數時遇到了問題。

我定義了一個類TCPServer如下:

class TCPServer {
public:
    TCPServer(aio::io_context &io_context, std::variant<PlainServer, PIRServer>);

    std::variant<PlainServer, PIRServer> server_;

private:
    ...
};

我定義類PIRServerPlainServer如下:

class PlainServer : public TCPServer {
public:
    explicit PlainServer(aio::io_context& io_context);
    ...
private:
    ...
};

PlainServer::PlainServer(aio::io_context& io_context) :
    server_config_(server_config),
    TCPServer(io_context, this) {}

我省略了PIRServer因為它無助於理解問題。

我的 IDE 在PlainServer構造函數中強調了TCPServer的初始化,並說:“沒有匹配的構造函數用於初始化 'TCPServer”。 我是否錯誤地使用了std::variant

您的variant包含一個PlainServer this是一個指向PlainServer指針 你可能想要:

class TCPServer {
public:
    TCPServer(aio::io_context &io_context, std::variant<PlainServer*, PIRServer*>);
...
};


PlainServer::PlainServer(aio::io_context& io_context) :
    server_config_(server_config),
    TCPServer(io_context, std::variant<PlainServer*, PIRServer*>(this)) {}

變體的顯式構造是必需的,因為它的單個 arg 構造函數是explicit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM