草庐IT

c++ - 如何使用枚举初始化 vector/数组?

我想知道是否有某种方法可以使用枚举来初始化vector。枚举是必需的,因为我正在创建一个对象vector(相同的类,Chess_piece,但类型不同)。我希望能够在不进行大量测试的情况下访问该元素(if(thisiswhitepawn8)...)。枚举可用于以一种很好的方式逐项列出片段vec(W_PAWN8)....无论如何,当我创建vector时,我会做这样的事情(伪代码)//generateenumofpiecesenumpieceList{...}pieceEnum;vectorpieceIter={W_PAWN1,W_PAWN2,...};//equalto{1,2,...}

c++ - 与 const 枚举值 0 匹配的 MSVC 函数

我被MSVC意外的C++函数匹配所困扰。我可以将其简化为以下测试用例:#includeenumCode{aaa,bbb};structMyVal{Codec;MyVal(Codec):c(c){}};voidtest(inti,MyValval){std::cout我预计test的所有7次调用都将匹配第一个重载,并且GCC(liveexample)和Clang(liveexample)按预期匹配:case1:value0case2:value0case3:value1case4:value0case5:value0case6:value0case7:value1但MSVC(liveex

c++ - 控制枚举值的可见性

考虑一个导出枚举的C++类,在该枚举上维护一个内部数组,并希望导出一个从枚举中接受值的命令。classfoo{public:enumcolor{red,yellow,green,NUM_COLORS};private:somethingsomebody[NUM_COLORS];public:voidcommand(colorc);};是否有一种干净的方法可以仅导出实际颜色,而不导出NUM_COLORS种颜色?当编译器的类型系统真的应该能够为我做这件事时,我不想在每次调用时都检查边缘情况。明显的hack是:classfoo{public:enumcolor{red,yellow,gree

c++ - 如何在类中定义枚举并从外部使用它

只是因为我不知道在我的C++书籍或google上到底在哪里可以找到它。我实际上如何在类中定义一些枚举(在本例中为{left=1,right=2,top=3,bottom=4})。我希望能够将此枚举作为参数而不是整数传递给成员函数,因此在外部使用枚举...有没有办法可以做到这一点,或者有没有更好的方法可以使枚举仅针对该类?这是无效的代码,显示enummySprite::myySprite::sidemembermySprite"mySprite::side"isnotatypename出于某种原因:classmySprite:publicsf::Sprite{public:enum{le

c++ - 枚举和枚举类的链接兼容性

假设有一个使用枚举类的C++11API://api.hppenumclassE{A,B,C};voidf(E);...//api.cppvoidf(Ee){if(e==E::A)...}现在假设我想使用这个API,但我没有C++11编译器。所以我:修改api.hpp并将枚举类更改为常规枚举。编写一些包含修改后的api.hpp并正常使用API的代码(例如调用f)。使用我的非C++11编译器编译此代码并将其链接到使用C++11编译器编译的API实现(使用未修改的api.hpp)。这似乎适用于GCC,但总体来说是否安全,或者我是在玩火(违反ODR等)?假设这两个编译器在其他方面是链接兼容的,

c++ - 有没有办法不警告 gcc 中的开关缺少 "COUNT"枚举常量?

如果带有枚举类型参数的开关缺少一些常量并且没有默认分支,则gcc-Wswitch选项会导致类似的警告warning:enumerationvalue'WHATEVER'nothandledinswitch然而,我们的许多开关是这样的:enumfoo{FOO_ONE,FOO_TWO,FOO_COUNT};其中FOO_COUNT从不作为值出现,但用于了解已定义并可能出现在变量中的值的数量。因为我们正在使用枚举值索引一个数组或对其进行位打包,并且需要检查它是否适合或其他什么。因此,处理所有值的枚举应该不包含这个常量。有没有办法保留该警告,但避免使用这种特殊值?即switch(foo){cas

c++ - 是否可以将作用域枚举 ("enum class") 上下文转换为 bool 值?

假设我有enumclassFlags:std::uint16_t{None=0,A=0x0001,B=0x0002,C=0x0004}inlineFlagsoperator|(Flagslhs,Flagsrhs){returnstatic_cast(static_cast(lhs)|static_cast(rhs));}inlineFlagsoperator&(Flagslhs,Flagsrhs){returnstatic_cast(static_cast(lhs)&static_cast(rhs));}inlineFlagsoperator|=(Flags&lhs,Flagsrhs)

python - Cython 的新手......似乎无法正确包装枚举

我是Cython的新手,但我想了解更多,因为我希望能够直接从Python调用相当大且复杂的C/C++代码集。我已经能够很好地运行这些示例,甚至能够包装我正在处理的主要项目的一小部分。但是我一直坚持包装枚举。我试图在一个非常简化的示例中阐明我正在尝试的内容。这是myenum.h中的C代码//myenum.henumstrategy{slow=0,medium=1,fast=2};这是我认为可以在pymyenum.pyx中用作wapper的东西#distutils:language=ccdefexternfrom"myenum.h"namespace"myenum":cdefenumstr

C++11 元编程 - 在编译期间查找枚举值(值包含间隙)

有没有办法在编译时验证给定的值在给定枚举的值范围内,因此有效?enummyenum{val1=10,val2=30,val3=45}templateclassmyClass{...}myClassa;//fails,OKmyClassb;//compilesOKmyClassc;//compiles,NOTOK!在那里使用第二个模板非类型bool参数会很有用,该bool值的值将由元函数给出,给定的值将验证该值是否在myenum的值内。我查看了各种与枚举相关的问题,例如如何迭代枚举,但似乎无法完成。 最佳答案 enummyenum{v

c++ - 将无效的 int 值转换为枚举

说我有enumFoo{Foo0,Foo1,Foo2};请注意,没有明确声明的Foo常量具有值3(它们是0、1和2)。以下是否会调用未定义的行为?Fooyay=(Foo)3;请特别注意3可能适合Foo的内部表示。 最佳答案 定义明确。为了表示值0、1和2,类型Foo必须至少有两个位,这也足以表示3。 关于c++-将无效的int值转换为枚举,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question