我正在尝试使用std::variant
来概括我的一些代码。但是,我在调用构造函数时遇到了问题。
我定义一个类TCPServer
如下:
class TCPServer {
public:
TCPServer(aio::io_context &io_context, std::variant<PlainServer, PIRServer>);
std::variant<PlainServer, PIRServer> server_;
private:
...
};
我定义类PIRServer
和PlainServer
如下:
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
。