草庐IT

c++ - 基于枚举的模板是个好主意吗?

我正在编写一个唯一ID生成器,它具有不同的策略来生成在一天、一周或一个月内唯一的ID。我不想创建具有虚函数机制的类层次结构像下面的代码片段那样做是个好主意吗?有什么建议吗?enumDuration{Day,Week,Month};templateclassIDGenerator{generateId();} 最佳答案 是的,它可以接受并且仅文件如果编译时多态性对您来说足够了-您将节省虚拟调用,这将允许更好的编译器优化。 关于c++-基于枚举的模板是个好主意吗?,我们在StackOverf

c++ - `typedef enum {} t` 是否允许 C++0x 中的作用域枚举元素标识符?

我相信新的C++标准允许枚举类型有一个额外的“作用域”:enumE{e1,e2};Evar=E::e1;因为我知道很多包含旧C风格枚举类型定义的源文件,我想知道新标准是否允许对这些匿名枚举类型使用类型定义:typedefenum{d1,d2}D;Dvar=D::d1;//error? 最佳答案 新标准将添加一种新型的强枚举,但语法会略有不同,旧式枚举将兼容(C++03中的有效代码将是有效的C++0x代码)因此您将不需要做任何事情来保持遗留代码有效(不是typedef,不是其他任何东西)。enumclassE{e1,e2};//new

c++ - 如何将一个类的嵌套枚举用作另一个类的嵌套枚举?

下面的代码将在enumen=A::en;行给出编译错误,但它描述了我想做的事情(使A的嵌套枚举成为也是B的嵌套枚举)。#includeusingnamespacestd;structA{enuma_en{X=0,Y=1};};structB{enumb_en=A::a_en;//syntaxerror};intmain(){cout所以问题是我如何在C++中做这样的事情? 最佳答案 将枚举放在A和B都可以继承的基类中。 关于c++-如何将一个类的嵌套枚举用作另一个类的嵌套枚举?,我们在S

c++ - C - 枚举索引数组的优点/缺点

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。根据我的经验,现实世界很少提供非负整数的索引。许多事情甚至没有用数字表示。许多用数字表示索引的东西的索引不是从0开始的。那为什么我们仍然局限于整数索引数组?也许我错了,但枚举索引数组似乎通常比数字索引数组更合适(因为枚举通常更准确,是“真实世界”的表示形式)。虽然枚举通常可以相对容易地转换为C风格的数组索引......enumWeekday={SUNDA

c++ - 这是(枚举 : char {}) a gcc bug?

在gcc-4.5下打印0,在gcc-4.6下打印1。#includeenumVenueId:char{};intmain(intargc,char**argv){VenueIdv=(VenueId)'P';std::cout 最佳答案 根据标准,VenuedId具有char类型作为基础类型,因此v应包含char'P',v=='P'应该产生true。§7.2枚举声明Eachenumerationdefinesatypethatisdifferentfromallothertypes.Eachenumerationalsohasanun

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

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

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#中的枚举与C++混淆了,但是我认为您只能使用Forms::shape访问枚举中的枚举器,这实际上会出错。intmain(){enumForms{shape,sphere,cylinder,polygon};Formsform1=Forms::shape;//errorFormsform2=shape;//ok}为什么shape允许在没有范围运算符的情况下在枚举之外访问,我如何防止这种行为? 最佳答案 嗯,因为枚举不构成声明范围。这就是它在C++中的方式。您想将这些枚举常量封装在专用范围内,请自己创建一个

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