c++ - 检查 boost::variant<T> 是否为空

标签 c++ boost null variant

我的程序中有一个 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/

相关文章:

java - 使用 JMS 发送消息

c++ - 根据 C++ 中动态生成的数字对列表进行排序

c++ - Boost/OpenCV 错误:不匹配调用 '(boost::_mfi::dm<void(cv::Mat*, cv::VideoCapture*), Recorder>)

c++ - 在循环内删除文件时 boost recursive_directory_iterator 失效

mysql - MySQL的DEFAULT NULL和CHECKBOX NULL有什么区别?

c++ - 将代码移动到另一个 header 后重新定义错误

c++ - 澄清任何声明中的评论

c++ - Segmentation fault (core dumped) - 无法修复错误

android - BaseActivity对象为null,onAttach方法在BaseFragment中不起作用

c# - 如何在 C# .Net 中将空指针传递给 Win32 API?