在构造函数初始化列表中使用 std::variant
Using std::variant in constructor initialization list
我正在尝试使用 std::variant
来概括我的一些代码。但是,我在调用构造函数时遇到 运行 问题。
我定义一个classTCPServer
如下:
class TCPServer {
public:
TCPServer(aio::io_context &io_context, std::variant<PlainServer, PIRServer>);
std::variant<PlainServer, PIRServer> server_;
private:
...
};
而我定义classes 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
的初始化,并说:"No matching constructor for initialization of '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
。
我正在尝试使用 std::variant
来概括我的一些代码。但是,我在调用构造函数时遇到 运行 问题。
我定义一个classTCPServer
如下:
class TCPServer {
public:
TCPServer(aio::io_context &io_context, std::variant<PlainServer, PIRServer>);
std::variant<PlainServer, PIRServer> server_;
private:
...
};
而我定义classes 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
的初始化,并说:"No matching constructor for initialization of '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
。