草庐IT

any_cast

全部标签

c++ - 无法在 boost 1.57 中编译 boost/any_iterator.hpp

在(尝试)升级VS2012项目以使用boost1.57之后,我无法再编译——boost/any_iterator.hpp中出现大量错误消息(见下文)。作为测试,我创建了一个新项目,其中只包含一个空的主函数和#include"boost/any_iterator.hpp"并得到了相同的错误集。这是它提示的代码://snippetfromboost/any_iterator.hpptemplateclasspostfix_increment_proxy>{//...};同一文件中还有另一个类遵循相同的模式并生成相同的错误。range_detail::any_iterator在文件中稍高一点

c++ - 将_cast 重新解释为 void 是否合法*

我在看https://en.cppreference.com/w/cpp/language/reinterpret_cast我注意到它指定了我们始终可以转换为的合法类型:字节*char*unsignedchar*但是我没有在列表中看到void*。这是疏忽吗?我的用例需要reinterpret_cast,因为我正在从int**转换为void*。我最终将从void*转换回int**。 最佳答案 这些类型不受严格的别名规则约束。这并不意味着它们是您可以与reinterpret_cast一起使用的唯一类型.在将对象指针转换为另一种对象指针类

c++ - Boost.Any 获取原始类型

我需要将any变量转换为原始类型。我需要这样做:inti=10;anya(i);int&i2=any_cast(a);但我希望类型存储在any变量中。我这样写:inti=10;anya(i);a::type_value&i2=any_cast(a);//thereisnoactuallytype_value我怎样才能做这样的事情?或者如何从any变量中提取原始类型?Boost.variant也很方便。如果我做不到,那么我还有一个问题,有什么C++技术和库可以通过函数存储和获取类型来解决这个问题? 最佳答案 C++是一种静态类型的语言

c++ - const_cast 是否会导致实际的代码排放?

const_cast真的只是告诉编译器“停止提示,将其视为非常量指针”的一种方式吗?有没有const_cast本身被翻译成实际机器代码的情况? 最佳答案 不,它只是在编译时删除了const属性。 关于c++-const_cast是否会导致实际的代码排放?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/759315/

c++ - `boost::any` 和 `std::any` 之间的差异

C++17引入了对象容器std::any,基于boost库boost::any.我的问题是:标准化的any是否等同于boost版本,或者是否存在差异?Asimilarquestionhasbeenpostedaboutvariant,在这种情况下存在一些差异,但我找不到关于any的引用。编辑:我能看到的一个区别是方法emplace的可用性。我对行为和保证之间的差异感兴趣的不仅仅是API的差异。例如,不同的分配对我来说很重要。 最佳答案 I'minterestedtothedifferencesbetweenthebehavioran

c++ - 当编译器看不到可以完成转换的可能类型时,是否允许编译器优化 volatile 指针的 dynamic_cast?

看看这个小片段:structA{virtual~A(){}};structB{};boolfn(){A*volatilea=newA;returndynamic_cast(a);}是否允许编译器完全删除dynamic_cast,并将dynamic_cast转换为简单的nullptr;?这个问题的原因是这个answer.注意事项:假定volatile意味着编译器不能假定任何有关a的信息,因为它是易变的。这是一个question为什么。dynamic_cast可能不允许被删除的事实是程序中某处可能有一个类型,它派生自A和B。 最佳答案

c++ - reinterpret_cast 可以更改对象表示吗?

我对reinterpret_cast的心理模型一直是,将表达式的位序列视为不同类型,并且cppreference(注意:这不是C++标准的引用)似乎同意这一点:Unlikestatic_cast,butlikeconst_cast,thereinterpret_castexpressiondoesnotcompiletoanyCPUinstructions.Itispurelyacompilerdirectivewhichinstructsthecompilertotreatthesequenceofbits(objectrepresentation)ofexpressionasifi

c++ - 我可以通过 reinterpret_cast 将 int 的空指针转换为 long 类型吗

int*pt=0;longi=reinterpret_cast(pt);我保证为0吗?这是明确定义的还是实现定义的?我检查了c++标准,但它只说明了Apointertoadataobjectortoafunction(butnotapointertomember)canbeconvertedtoanyintegertypelargeenoughtocontainit.在这种情况下,pt不指向任何数据对象。该规则适用于这种情况吗? 最佳答案 否,i不一定是任何值。结果是实现定义的。†在C++中,指针的表示是实现定义的,包括空指针的表示

c++ - 为什么我不能使用 static_cast<int&> 将整数引用参数传递给 C++ 中的函数?

我在C++程序中有一个枚举参数,我需要使用一个通过参数返回值的函数来获取它。我首先将其声明为int,但在代码审查时被要求将其键入为枚举(ControlSource)。我这样做了,但它破坏了Get()函数——我注意到C风格的转换为int&解决了这个问题,但是当我第一次尝试用static_cast修复它时,它没有编译。为什么会这样,为什么当eTimeSource是一个int时根本不需要强制转换来通过引用传递整数?//GetCuePropertyValuesignatureis(intcueId,intpropertyId,int&value);ControlSourceeTimeSourc

c++ - 从字符串/boost::any 映射构建 boost::options

我有一张代表配置的map。这是std::string的map和boost::any.此map在开始时已初始化,我希望用户能够在命令行上覆盖这些选项。我想做的是使用options_description::add_option()从这张map构建程序选项方法。但是,它需要一个模板参数po::value而我只有boost::any.到目前为止,我只有代码的外壳。m_Config代表我的配置类,getTuples()返回std::map.TuplePair是std::pair的类型定义元组包含boost::any我感兴趣。po::options_descriptiondesc;std::fo