初始化std::variant<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
的初始化,那么另一个问题是
根据标准,变体是 "ilformed"。
我只是想在构造函数中将它初始化为一些默认值,但是如何?
只需为其分配默认值一个类型:
X::X() : mpRenderTarget(CComPtr<ID2D1HwndRenderTarget>{}) {}
您也可以明确指出默认指针值为 nullptr
:
X::X() : mpRenderTarget(CComPtr<ID2D1HwndRenderTarget>{nullptr}) {}
重要的部分是您必须指定您要使用哪种variant
类型来初始化对象。
我有一个 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
的初始化,那么另一个问题是
根据标准,变体是 "ilformed"。
我只是想在构造函数中将它初始化为一些默认值,但是如何?
只需为其分配默认值一个类型:
X::X() : mpRenderTarget(CComPtr<ID2D1HwndRenderTarget>{}) {}
您也可以明确指出默认指针值为 nullptr
:
X::X() : mpRenderTarget(CComPtr<ID2D1HwndRenderTarget>{nullptr}) {}
重要的部分是您必须指定您要使用哪种variant
类型来初始化对象。