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