boost::any 如何检查空/未定义值

3

我有一个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也有相同的方法。 - lars
1个回答

2

boost::any::empty函数会在没有值的情况下返回true

演示

#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)

演示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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接