草庐IT

c++ - 使用 "yes","no","i","out"作为变量/枚举的名称是否安全?

我看过C++命名规则的文档,好像都是可用的名字。但是,在实践中,当我尝试创建一个名称类似于iter的变量/枚举时,yes、no、out、i、Error等,VisualStudio会奇怪地为它们使用italic字体。我只能猜测它们是为特殊事物保留的,如果我使用这样的名称,IDE(例如重构/重命名过程)可能会表现得很奇怪。在实践中使用这些名称是否安全?我是不是太panic了?对不起,如果它太新手或不合适的问题。我怀疑了几个星期,但不敢问。 最佳答案 这些名称是有效的,不会造成任何“伤害”,标准只说:Eachnamethatcontain

c++ - 没有花括号的枚举形式

我今天目睹了一种enum的形式,它是这样编写的,在VS2017下编译:enumensen1,en2,en3;然后它被这样使用:intn=en2;所以我的问题是,它是什么形式的enum以及为什么n后来设置为0?Liveexample:enumensen1,en2,en3;intmain(){intn=en2;}使用默认的编译器选项在没有警告的情况下编译 最佳答案 此示例不正确,因为枚举的声明必须包含底层类型或项目列表。这也意味着它不能与变量声明结合使用。固定变体:enumens:int;//ensisacompletetypeatth

c# - C# 是否会受益于枚举器种类之间的区别,例如 C++ 迭代器?

我一直在思考IEnumerator.Reset()方法。我在MSDN文档中读到它仅用于COM互操作。作为一名C++程序员,它看起来像一个支持Reset的IEnumerator,我称之为forwarditerator。,而不支持Reset的IEnumerator实际上是一个inputiterator.所以我的问题的第一部分是,这种理解是否正确?我的问题的第二部分是,如果在输入迭代器和前向迭代器(或“枚举器”,如果您愿意)之间有所区别,这对C#有什么好处吗?它不会有助于消除程序员之间的一些困惑,就像在这个SOquestionaboutcloningiterators中发现的那样吗??编辑:

c++ - 类型安全的 C++11 枚举类标志模板

我正在尝试使用模板创建类型安全的C++标志。我还想区分a标志和flags(零、一个或多个标志)。下面的解决方案效果很好,除了EnumFlagoperator|(T,T)这导致所有|-对枚举的操作以返回类型EnumFlag.这会破坏很多代码。有什么技巧可以解决这个问题吗?在我的代码中,我执行以下操作,但是硬编码Option这不是一个选择。如何使它通用?EnumFlag::value,T>::type>operator|(Tl,Tr)将其更改为...EnumFlagoperator|(Tl,Tr)...原因打破了一切。我想要这样的东西(不是编译标签代码)。或者任何其他更好的主意!EnumF

c++ - 没有明确范围的强类型枚举?

我想要强枚举类型。C++0x具有此功能,但不幸的是,它们还需要明确的作用域:enumclassE{e1,e2,e3};Ex=E::e1;//OKEy=e1;//error有时这是可取的,但有时只是不必要的冗长。标识符本身可能足够唯一,或者枚举可能已经嵌套在类或命名空间中。所以我正在寻找解决方法。在周围范围内声明枚举值的最佳方式是什么? 最佳答案 如果您希望值在周围范围内可见,只需添加几个常量:enumclassE{e1,e2,e3};constEe1=E::e1;constEe2=E::e2;constEe3=E::e3;

c++ - 请求从 'KanjiCard*' 到非标量类型 'KanjiCard' 的转换(自定义枚举)

好的,我已经尝试使用Google-sensei并在此网站上四处搜索,虽然我发现了很多关于此错误的帖子,但我还没有找到任何解决枚举的帖子。此外,我所看到的所有问题要么是有人试图将一种类型分配给另一种类型,要么是对"new"的不当使用,等等。据我所知,在这种情况下情况并非如此。如标题中所述,在尝试使用g++编译我正在处理的程序时,出现错误conversionfrom'KanjiCard*'tonon-scalartype'KanjiCard'requested.我有一个名为KanjiCard的类,它有这个公开定义的枚举:enumKanjiCardType{KANJI_CARD=1,KEYW

c++ - 避免在类模板中重复访问枚举的模板参数

考虑一个实现容器的类模板,其中包含用于选择其存储位置的选项。templateclassContainer{public:enumStorageOption{A,B};Container(StorageOptionopt_):option(opt_){}private:StorageOptionoption;};此处StorageOption被选为成员,因为它仅在类中使用。现在,要实例化类,我需要重复模板参数,例如:{Containerc(Container::A);}有没有一种方法可以避免重复参数,同时让StorageOption成为成员,或者有没有更好的方法来实现该选项?

c++ - 是否可以在 google protobuf 中为类型(枚举或消息)定义别名?

我的原型(prototype)文件中有两个枚举,它们定义了几乎相同的值。是否可以删除其中一个并留下一个别名以保持所有代码正常工作?例子:enumA{a=0;b=1;}enumB{a=0;b=1;}我想在C++中使用类似typedef的东西:enumA{a=0;b=1;}typedefAB;我没有在文档中找到这个。有任何解决方法吗? 最佳答案 这是一个老问题,但如果有人仍然感兴趣,现在可以使用protobuf在枚举上创建别名enumEnumAllowingAlias{optionallow_alias=true;UNKNOWN=0;S

c++ - 如何使用 libclang 获取枚举元素的数值?

假设我有一个枚举定义,例如://myenum.henumMyEnum{First=1,Second,Third,TwoAgain=Second};我想根据任何给定的枚举定义以编程方式生成映射,其中键是枚举元素的名称,值是枚举元素的数值(例如myMap["TwoAgain"]==2)到目前为止,我知道如何使用clang_visitChildren()遍历源文件,并使用clang_tokenize()提取单个标记。通过AST递归,我按以下顺序获得游标/标记:“MyEnum”(CXType_Enum)“第一”(CXToken_Identifier)"="(CXToken_Punctuatio

c++ - 在 C++ 中使用枚举类值调用数组元素

我的代码:枚举.h#ifndefENUMERATIONS_H#defineENUMERATIONS_HenumclassEmployees{ERIC,RYAN,EMILY};#endif结构.hstructEmployee{std::stringname;doublewage;};评论.cpp#include"stdafx.h"#include#include#include"Enumerations.h"#include"Structs.h"EmployeeemployeeArray[3];employeeArray[0]={"EricSartor",18.75};employeeA