【问题标题】:boost::any how to check for a null/undefined valueboost::any 如何检查空值/未定义值
【发布时间】:2020-01-03 14:33:42
【问题描述】:

我有一个 boost::any 对象,我想检查它的类型。

typedef boost::any Value;

Value a = 12;

if(a.type() == typeid(int)) {
    std::cout << boost::any_cast<int>(a) << std::endl;
}

定义类型时这很容易,但是当类型未定义时(即因为它的值尚未设置),我如何获得相同的结果。

Value b;

if(b is undefined) {
   std::cout << "b is not defined" << std::endl;
}

【问题讨论】:

  • std::any 有 has_value() 方法,我希望 boost 也有。

标签: c++ boost types null boost-any


【解决方案1】:

如果没有值,boost::any::empty 将返回 true

Demo

#include "boost/any.hpp"
#include <iostream>

int main()
{
    boost::any a = 42;
    if (!a.empty())
        std::cout << "a has a value\n";

    boost::any b;
    if (b.empty())
        std::cout << "b does not have a value\n";
}

或者,您可以像在第一个示例中那样使用boost::any::type,如果没有值,它将返回typeid(void)

Demo 2

boost::any a = 42;
std::cout << std::boolalpha << (a.type() == typeid(int)) << std::endl; // true

boost::any b;
std::cout << std::boolalpha << (b.type() == typeid(void)) << std::endl; // true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-06
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多