我搜索了有关前向声明的信息,但没有找到任何方法来解决我的情况。所以这里是: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++11为我们如何处理枚举引入了两个不同的补充:一个使它们具有作用域的选项,一个使它们有类型的选项。所以现在我们有四种不同的枚举子类型:enumOld{};enumTyped:int8_t{};enumclassScoped{};enumclassTypedScoped:int8_t{};Thisquestion询问如何确定枚举是否有范围。我想知道如何判断枚举是否有类型。附加信息我使用Qt框架,它提供了QDataStream类,用于以可移植的跨平台方式序列化/反序列化数据。显然,为了使生成的数据流可移植,您必须以固定长度的形式存储所有整数。这也包括枚举。过去,我制作了几个辅助宏来定义
我正在使用GoogleTest1.7.0版来测试我的C++应用程序。我有一个枚举定义如下namespaceMyNamespace{enumclassMyEnum{MyEnumValue,MyEnumValue2}}GoogleTest错误地打印它的值,导致测试失败时出现此错误消息:Valueof:MyClass.MyMethodThatReturnsEnum()Actual:4-byteobjectExpected:MyEnum::MyEnumValueWhichis:4-byteobject删除class关键字会生成带有枚举实际值的正确错误消息。这是GoogleTest的已知行为/错
有没有办法以类型安全的方式从枚举中随机选择一个元素?我能找到的最好的方法是引入一个终止符值作为枚举的最后一个元素,这样你就知道有多少个值,然后在你转换的适当范围内生成一个随机整数到枚举。但是终止符值不代表任何东西,所以你有一个无效的枚举值,这不是类型安全的。在最新的C++标准中有更好的方法吗? 最佳答案 这似乎是std::map的一个很好的用例std::mapnicer_enum{{"Do",3},{"Re",6},{"Mi",9}};std::coutsecond 关于c++-使用最新
我在CppCon2014的一次演讲中遇到了如下代码,这让我很困惑。观众没有评论就接受了,所以我认为这是合法的:enumclassFoo{Bar};Fooconstv1=Foo(5);问题是:为什么要编译?我希望编译失败并提示我们不能将int转换为Foo。下面稍作修改的行因预期错误而失败:Fooconstv1(5); 最佳答案 作用域枚举类型有一个隐式底层类型int,假设没有指定其他底层类型。可以表示int类型的所有可能值。7.2p5:[...]Forascopedenumerationtype,theunderlyingtypeis
-背景信息:C++11中有一个类,称为枚举类,您可以在其中存储变量。但是,我只看到类的类型是char:enumclass:char{v1='x',v2='y'};-问题:有什么方法可以表达这个字符串类型的枚举类?例如,enumclass:string{v1="x",v2="y"};-我的想法:我尝试使用它,但出现错误,我不确定我是否做对了。我想使用字符串的原因是它们能够同时保存多个字符,所以这对我的代码更有用。 最佳答案 在C++11或C++14中无法做到这一点。但是,您应该考虑使用一些enumclass,然后编写一些显式函数或运算
在C++中,至少在GCC和Clang上,嵌入在容器中的过度对齐类型(std::vector)似乎根据类型是过度对齐的结构还是过度对齐的枚举而被区别对待.对于结构版本,每个元素都对齐,而对于枚举版本,只有整个缓冲区具有指定的对齐方式。标准是否指定了此行为?如果是这样,哪一部分提到了它?还是实现定义的,不应依赖?考虑以下几点:#include#include#includestructalignas(16)byte_struct{std::uint8_tvalue;};enumalignas(16)byte_enum:std::uint8_t{};intmain(){{//withstru
这在C#中是可能的(参见Howtoconvertenumtotype),但我想知道我应该如何在C++11中实现它?可能的代码框架(也显示了我的预期用途)是://classify.h(partofpublicAPI)//definitionsofclassesA,B,Ccannotbeexposed,onlyalistofnames//(somenamesmightevenrefertothesametypeofobject)enumEAllowedTypes{eA,eB,eC};classEntity;boolclassifyEntityAs(constEntity&ent,EAllo
我学会了enums当我学习C时,我不时地提醒自己,而且大部分时间都是通过重新阅读某些资料,我想到这是因为我从未在我的编程中使用它,我的编程兴趣专注于解决算法问题,所以我不确定我可以在哪里使用枚举。有人可以推荐一些使用枚举使事情变得容易的好例子吗?我会喜欢算法示例,但欢迎算法或非算法示例。 最佳答案 想象一下,您正在编写一个深度优先搜索程序,并且您想要用它们是树、后、前还是交叉来标记边。您可以创建一个具有四种可能性的枚举EDGE_TYPE,并使用它来标记您的边缘。 关于c++-使用枚举的一
我在g++4.8.1和clang++3.4的行为之间存在差异。我有一个A类,它是文字类型的,它有一个explicitconstexpr转换函数来输入enumclassE.Gcc允许我在某些情况下使用转换函数从A类型的常量表达式初始化constexpr类型的E变量,但是不是当变量是静态类成员时(下面的e2)Clang拒绝所有上下文中的初始化(e1、e2和e3)。根据[over.match.conv]p1,在这里可以使用显式转换函数enumclassE{e};structA{explicitconstexproperatorconstE()constnoexcept{returnE::e;