gpt4 book ai didi

c++ - 可以 boost boost::any_cast(any&) 吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:43:26 24 4
gpt4 key购买 nike

看起来像是调用了boost::any_cast<T>(any&)调用一些昂贵的类型检查以确保转换有效。具体来说,它调用执行以下测试以确保转换是合法的:

std::strcmp(操作数->type().name(), typeid(ValueType).name()) == 0

如果强制转换是合法的,则代码会执行 static_cast。

这对于 Debug模式似乎很有用,但对于生产代码来说相当慢。有什么办法可以跳过 strcmp 吗?

最佳答案

boost::any 包含一组未记录的 ValueType * unsafe_any_cast(any * operand) 函数,可以为 any* 执行您想要的操作操作数。

您可以使用您的引用地址来获得您想要的内容,或者由于 Boost 是开源的,您可以修补一组这些函数模板以使用 any& 操作数。

然后制作一个包装器,在调试版本中使用安全版本,在发布版本中使用不安全版本。但是,我至少要进一步添加 - 调试包装器应该捕获因无效转换而抛出的异常并调用调试器或使程序崩溃,以便在 Debug模式下运行时不会以以下方式处理这些无效转换隐藏了发布版本会有未定义行为的事实。

另请记住,Boost 保留删除不安全版本的权利:

// Note: The "unsafe" versions of any_cast are not part of the
// public interface and may be removed at any time.

因此,如果您决定使用这些功能(或修补 any.hpp 以扩展它们),您就购买了某种程度的维护义务,这可能会或可能不会被接受,具体取决于您的用户代码可能会交付给。

关于c++ - 可以 boost boost::any_cast<double>(any&) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com