在构造函数初始化列表中使用 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 在PlainServer构造函数中强调了TCPServer的初始化,并说:"没有匹配的构造函数来初始化'TCPServer'。我是否使用std::variant不正确?

您的variant持有PlainServerthis是指向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

相关内容

  • 没有找到相关文章

最新更新