boost 变体的默认构造函数初始化第一个有界类型。我如何默认初始化除第一个成员之外的任何成员?一种选择是简单地分配正确类型的默认构造对象。但是,这不适用于某些类型,例如数组。没有初始化boost::get
会抛出boost::bad_get
异常。所以我不能std::copy
在数组上做。
boost::variant<std:string, int[5]> v; // default initializes the string.
我需要类似的东西
initialize<int[5]>(v);
在使用数组作为第一个有界类型时,我也遇到了编译问题。Clang 报错如下:
object expression of non-scalar type 'int [5]' cannot be used in a pseudo-destructor expression
operand.~T();
编辑:我对 boost.optional 有同样的问题。是否有默认初始化可选的 API?我的意思不是来自默认初始化 T 的赋值。