boost::any_cast 和 std::optional's

boost::any_cast and std::optional's

本文关键字:optional any cast boost std      更新时间:2023-10-16

i使用boost::any,并且具有检索这样的值但可能失败的功能,因此它实际上返回std::optional<boost::any>(嗯,现在是std::experimental::optional)。现在,没有可选的,我使用boost::any_cast(my_retrieved_any)获得了键入的值。要处理可选案例,我写了以下内容:

template<typename ValueType>
inline const optional<ValueType> boost_any_cast(const optional<boost::any>& operand)
{
    return operand ? boost::any_cast(operand.value()) : nullopt;
}

但这不会编译(使用Boost 1.58和GCC 4.9.3)。我得到:

/file.cpp(12): error: no instance of overloaded function "boost::any_cast" 
matches the argument list
            argument types are: (const boost::any)

这怎么可能?为什么参数不是boost::any&?我尝试将变量设置为protand.value(),然后将其传递给Any_cast - 但这似乎也没有帮助:

template<typename ValueType>
inline const optional<ValueType> boost_any_cast(const optional<boost::any>& operand)
{
    if (operand) {
        boost::any x(operand.value());
        return boost::any_cast(x);
    }
    return nullopt;
}

这让我:

/file.cpp(13): error: no instance of overloaded function "boost::any_cast"
 matches the argument list
            argument types are: (boost::any)

关于boost::any的S ...是什么?这是什么?我该如何修复此"铸造"操作?

boost::any_cast需要模板参数;

template<typename T> T any_cast(const any &);

在您的代码段中,您可能需要;

boost::any_cast<ValueType>(operand.value())