我的程序中有一个 boost::variant,我想检查变体本身是否已初始化,以及其中一种类型中是否包含值。
我已经在变体上尝试了 empty() ,但这似乎不起作用。也不会检查 NULL。
有人知道如何检查吗?
编辑:好的,它似乎永远不会为空,但它所包含的类型中并不总是有值,那么如何检查无值情况?
最佳答案
如果您看到 my question regarding never empty guarantee and single storage , boost::variant
确实支持名为 boost::blank
的类似 NIL 的值类型.这将保证变体永远不会使用堆作为备份存储
您可以使用 boost::variant<>::which()
检测存储的类型它返回绑定(bind)变体类型的整数索引;因此,如果您使用空白作为第一种类型,which() 将在其空白时返回 0
看下面的例子
typedef boost::variant< boost::blank , int , std::string > var_t;
var_t a;
assert( a.which() == 0 );
a = 18;
assert( a.which() == 1 );
希望对你有帮助
关于c++ - 检查 boost::variant<T> 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312259/