在构造函数初始化列表中使用std :: variant

时间:2019-12-06 00:44:10

标签: c++ std variant

我正在尝试使用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强调了TCPServer构造函数中PlainServer的初始化,并说:“没有匹配的构造函数来初始化'TCPServer”。我使用的是std::variant吗?

1 个答案:

答案 0 :(得分:1)

您的variant拥有PlainServerthisPlainServer指针。您可能想要:

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