![](/img/trans.png)
[英]Explicit constructor and initialization with std::initializer_list
[英]Using std::variant in constructor initialization list
我正在嘗試使用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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.