簡體   English   中英

初始化 std::variant<pointer, pointer> ?</pointer,>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM