草庐IT

c++ - 在 C 中定义的 C++ 中向前声明枚举

我搜索了有关前向声明的信息,但没有找到任何方法来解决我的情况。所以这里是:1)有一个C-header文件,可以说是一个大型多组件软件的导出接口(interface),它包含一个枚举类型定义“导出.h”://Thisisin"C"!typedefenum_VM_TYPE{....,....,...,}VM_TYPE;2)C++中的一部分代码使用该导出。“cpp_code.cpp”://ThisisinC++#include"export.h"#include"cpp_header.hpp"{....usingVM_TYPEvaluestodostuffs....}“cpp_header.

c++ - 是否可以确定枚举是否为强类型?

C++11为我们如何处理枚举引入了两个不同的补充:一个使它们具有作用域的选项,一个使它们有类型的选项。所以现在我们有四种不同的枚举子类型:enumOld{};enumTyped:int8_t{};enumclassScoped{};enumclassTypedScoped:int8_t{};Thisquestion询问如何确定枚举是否有范围。我想知道如何判断枚举是否有类型。附加信息我使用Qt框架,它提供了QDataStream类,用于以可移植的跨平台方式序列化/反序列化数据。显然,为了使生成的数据流可移植,您必须以固定长度的形式存储所有整数。这也包括枚举。过去,我制作了几个辅助宏来定义

c++ - 枚举类的 GoogleTest 测试错误打印

我正在使用GoogleTest1.7.0版来测试我的C++应用程序。我有一个枚举定义如下namespaceMyNamespace{enumclassMyEnum{MyEnumValue,MyEnumValue2}}GoogleTest错误地打印它的值,导致测试失败时出现此错误消息:Valueof:MyClass.MyMethodThatReturnsEnum()Actual:4-byteobjectExpected:MyEnum::MyEnumValueWhichis:4-byteobject删除class关键字会生成带有枚举实际值的正确错误消息。这是GoogleTest的已知行为/错

c++ - 使用最新的 C++ 以类型安全的方式从枚举中随机选择一个元素

有没有办法以类型安全的方式从枚举中随机选择一个元素?我能找到的最好的方法是引入一个终止符值作为枚举的最后一个元素,这样你就知道有多少个值,然后在你转换的适当范围内生成一个随机整数到枚举。但是终止符值不代表任何东西,所以你有一个无效的枚举值,这不是类型安全的。在最新的C++标准中有更好的方法吗? 最佳答案 这似乎是std::map的一个很好的用例std::mapnicer_enum{{"Do",3},{"Re",6},{"Mi",9}};std::coutsecond 关于c++-使用最新

c++ - 如何在 C++ 中进行从枚举到类型的转换(并在模板中使用)?

这在C#中是可能的(参见Howtoconvertenumtotype),但我想知道我应该如何在C++11中实现它?可能的代码框架(也显示了我的预期用途)是://classify.h(partofpublicAPI)//definitionsofclassesA,B,Ccannotbeexposed,onlyalistofnames//(somenamesmightevenrefertothesametypeofobject)enumEAllowedTypes{eA,eB,eC};classEntity;boolclassifyEntityAs(constEntity&ent,EAllo

c++ - 使用枚举的一些很好的例子

我学会了enums当我学习C时,我不时地提醒自己,而且大部分时间都是通过重新阅读某些资料,我想到这是因为我从未在我的编程中使用它,我的编程兴趣专注于解决算法问题,所以我不确定我可以在哪里使用枚举。有人可以推荐一些使用枚举使事情变得容易的好例子吗?我会喜欢算法示例,但欢迎算法或非算法示例。 最佳答案 想象一下,您正在编写一个深度优先搜索程序,并且您想要用它们是树、后、前还是交叉来标记边。您可以创建一个具有四种可能性的枚举EDGE_TYPE,并使用它来标记您的边缘。 关于c++-使用枚举的一

c++ - Argument Dependent Lookup 的逆向解决方法?

C++具有ADL(参数相关查找),正如其名称所描述的那样,函数的上下文(命名空间)可以从(任何)参数的上下文(命名空间)中隐含。fun(a);//ifthetypeofaisinnamespacensdeducens::fifavailable我的问题是,是否也可以通过某种技术进行反向操作?我所说的反向是指上下文(命名空间)是否可以从被调用函数的上下文中推导出来。某种“功能相关查找”(FDL)。假代码:ns::fun(a);//deducens::aifavailable我想不出这样做的方法。对于用于对函数选项进行编码的enum,此限制尤其烦人。我想知道是否有一种技术可以模拟此功能(C

C++17:还在使用枚举作为常量吗?

这个问题在这里已经有了答案:Replacingconstants:whentousestaticconstexprandinlineconstexpr?(2个答案)关闭3年前。我习惯于将enum用作常量——它们编写起来很快,可以放在.h文件中,并且工作正常。enum{BOX_LEFT=10,BOX_TOP=50,BOX_WIDTH=100,BOX_HEIGHT=50};enum{REASONS_I_LIKE_ENUM_AS_CONSTANTS=3};这不再是一个好主意吗?我看不错reasons更喜欢枚举类(传统枚举隐式转换为int;传统枚举将它们的枚举器导出到周围的范围),但在这种情况

c++ - 我可以使用枚举类值作为可变参数函数的参数吗?

C++11添加了枚举类,它们是更强类型的枚举-枚举类的值不会隐式转换为其他枚举类或整数的值,并且由于显式大小说明符而允许前向声明。是否可以将此类枚举的值传递给可变参数函数并保持在标准定义的行为范围内?在实现定义的行为中? 最佳答案 是的,你可以。5.2.2/7明确允许任何枚举类型的参数。未限定范围的枚举值是整数提升的,但限定范围的枚举(enumclass的)不是。当然在函数的实现上还是要慎重。 关于c++-我可以使用枚举类值作为可变参数函数的参数吗?,我们在StackOverflow上找

c++ - 我们可以在函数中定义枚举吗?

我们可以在一个函数中定义class/struct。我们还可以在函数中定义enum和union吗?voidfun(){enum{BIG,MID,SMALL};//othercode.}我可以用gcc4.8.2编译代码,但我不确定它是否合法。 最佳答案 是的,在函数中定义枚举是完全可以的。您的代码描绘了完全合法的匿名枚举声明。结构和类可以在函数中声明以及(也可能是匿名的)。在其中声明的类型的唯一限制一个函数(而不是在命名空间或类范围内)是它们不能用作模板参数。更多信息EnumerationC++11以上关于模板参数的限制自C++11起已