[英]Initialize std::variant<Pointer, Pointer>?
我有一個 class 看起來像這樣:
class X
{
std::variant<CComPtr<ID2D1HwndRenderTarget>, CComPtr<ID2D1DCRenderTarget>> mpRenderTarget;
void init();
}
// To early to know which member we need, it's no value until derived class calls init() method.
X::X() : mpRenderTarget(nullptr)
void X::init()
{
// Only here it is known what exactly to initialize!
// and this is going to be in derived class, this one pure virtual.
}
問題是這個構造函數不能編譯,因為變量初始化是無效的,但是如果我在構造函數中省略了mpRenderTarget
的初始化,那么另一個問題是變量根據標准是“錯誤的”。
我只想將它初始化為構造函數中的某個默認值,但是如何?
只需為其分配以下類型之一的默認值:
X::X() : mpRenderTarget(CComPtr<ID2D1HwndRenderTarget>{}) {}
您也可以明確指出默認指針值為nullptr
:
X::X() : mpRenderTarget(CComPtr<ID2D1HwndRenderTarget>{nullptr}) {}
重要的部分是您必須指定要使用哪種variant
類型來初始化 object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.