boost::any_cast 和 std::optional's
boost::any_cast and std::optional's
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())
相关文章:
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- 哪些类型可以转换为std::any
- 检查某些类型是否是模板类 std::optional 的实例化
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 使用 std::optional,而不是自己的结构
- 引用 std::any 或 not_yet_in_std::whatever 的惯用方式是什么?
- C++17:使用 std::optional 来评估枚举是否包含值
- 从返回 std::optional of std::vector 的函数中获取结果到调用方
- std::is_reference from std::any
- 是否可以从 std::any 创建 std::any 与 std::reference_wrapper?
- "reserved for any use"的含义是什么?
- boost::any 如何检查空值/未定义的值
- API 返回智能指针的 std::optional 以明确指定指针可能为 null 是否有意义?
- 使用 std::map 存储在 std::any 中,然后通过 std::any_cast 访问
- 可以有效地转换 std::any 与 std::any_cast
- 避免使用 std::any 编写相同的重复类型检查代码
- 广义 std::function (std::any 表示可调用对象)
- 函数可以应用于 std::optional,并返回一个可选值吗?