草庐IT

枚举法

全部标签

c++ - 无法在枚举中声明 "div"

我想声明一个具有如下基本数学运算的枚举:enumOperations{div,mul,add,sub};但编译器会提示此声明,因为div是C++中的保留关键字。我怎样才能覆盖它?或者有什么解决办法吗?这是错误信息:error:‘div’redeclaredasdifferentkindofsymbol/usr/include/stdlib.h:158:error:previousdeclarationof‘div_tdiv(int,int)’ 最佳答案 div不是关键字,而是标准库函数,在stdlib.h中声明,也可能在cstdli

c++ - 枚举和指向成员的指针

我最近尝试创建一个is_class类,并且需要一种方法让编译器区分枚举类型和定义了转换运算符的类类型。鉴于类、结构和union是唯一与指向成员函数的指针兼容的类型,我决定让编译器确定用于实例化is_class模板的类型是否反过来兼容带有指向成员函数的指针。在遇到几个问题后,我决定测试枚举与指向成员的指针结合使用时的行为,并得到了一些古怪的结果。以下片段说明了第一个怪癖:enumENUM{};voidTest(void(ENUM::*pmem)(void)){/*...*/}Test(NULL);当使用MicrosoftVisualC++2010编译时,函数定义的成员指针部分:(ENUM

c++ - C++11 中弱类型枚举的底层类型

C++11引入了强类型枚举,语法为enumclass。它们与整数类型不兼容,需要显式转换才能获得它们的数值。C++11还引入了为弱类型枚举指定存储类的功能,格式为enumname:type{}。到这里为止都很好。但看起来即使弱类型枚举具有给定的存储类,其项的类型仍然是int。我尝试使用VisualStudio2012,11月CTP版本。考虑以下代码:enumcharEnum:char{A='A'};enumlongEnum:longlong{Tera=1000000000000};voidfct(charval){}voidfct(intval){}voidfct(longlongva

c++ - std::get 使用枚举类作为模板参数

我正在使用std::tuple并定义了一个枚举类以某种方式“命名”元组的每个字段,而忘记了它们的实际索引。所以不要这样做:std::tupletup;/*...*/std::get(tup)=bleh;//wasit0,or1?我这样做了:enumclassSomething{MY_INDEX_NAME=0,OTHER_INDEX_NAME};std::tupletup;/*...*/std::get=0;//Idon'tmindtheactualindex...问题是,因为这个是用gcc4.5.2编译的,我现在安装的是4.6.1版本,我的项目编译失败。此代码段重现了错误:#inclu

c++ - 初始化枚举索引数组?

gcc在C中有一个非常好的扩展,允许您使用枚举作为键将数据保存在数组中:enumkeys{key_alpha=0,key_beta=1,key_gamma=2};ValTypevalues={[key_alpha]={0x03b1,"alpha"},[key_gamma]={0x03b3,"gamma"},[key_beta]={0x03b2,"beta"}};这很好,因为如果必须更改列表,添加或删除一行不会破坏分配,很明显哪个键对应于哪个值,并且导致简单代码与普通标准数组初始化没有区别。不幸的是,这个扩展在g++中不可用。在C++中执行相同操作的首选轻量级方法是什么?最好不要基于之类

c++ - 在什么情况下应该使用匿名枚举?

在c和c++中enum都可以用标签定义enume_smth{smth_one,smth_two,smth_err};或不带标签enum{smth_one,smth_two,smth_err};如果它是用标签定义的,那么在c和c++的switch语句中都是有意义的:e_smthsome_var;....//dosomestuffwithsome_varswitch(some_var){casesmth_one:break;casesmth_two:break;}如果使用gcc或g++编译,将产生-Wswitch警告。它在C++中的函数声明和变量初始化中有意义:e_smthvar;var=

c++ - 枚举的 reinterpret_cast 错误

为什么我不能对这样的转换使用reinterpret_cast运算符?enumFoo{bar,baz};voidfoo(Foo){}intmain(){//foo(0);//error:invalidconversionfrom'int'to'Foo'//foo(reinterpret_cast(0));//error:invalidcastfromtype'int'totype'Foo'foo(static_cast(0));foo((Foo)0);} 最佳答案 Ithinkthatreinterpret_castcanbeusef

表达式必须包含整数或枚举类型 - Visual Studio C++ 错误

在使用VisualStudioC++进行编程时,有时你可能会遇到错误消息:“表达式必须包含整数或枚举类型”。这个错误通常是由于在表达式中使用了错误的数据类型导致的。在本文中,我们将详细解释这个错误的原因,并提供一些可能的解决方案。错误原因:当你在C++程序中使用一个表达式时,该表达式必须包含整数或枚举类型的值。如果你在表达式中使用了其他类型的值,比如浮点数、字符或自定义的类对象,就会触发这个错误。解决方案:要解决这个错误,你需要检查你的代码并确保表达式中使用的值是整数或枚举类型的。这里有一些常见的情况和解决方案:检查变量类型:确保你在表达式中使用的变量是整数或枚举类型的。如果你使用了其他类型的

windows - 如何在 Delphi 中枚举另一个进程的窗口?

我有一个进程foo.exe,它使用CreateProcess函数创建一个进程bar.exe。我想(在foo.exe中)枚举在bar.exe中创建的窗口的控件,为此我(假设我)需要窗口HWND。我知道bar.exe中的所有窗口类,而bar.exe一次只为每个类创建一个窗口,所以我可以使用该类名称来找到我想要的窗口。但是我应该使用什么函数来枚举另一个进程中的窗口呢?我正在寻找采用进程句柄或PID(均由CreateProcess函数返回)和EnumProc回调过程的东西。我是否应该找到bar.exe的线程ID(它是一个单线程应用程序)并将其与EnumThreadWindows函数一起使用?

c++ - 有没有办法保存 USB 设备,以便在重新插入后可以防止重新枚举?

首先,我们正在使用将自身绑定(bind)到USB设备的第3方软件。当此USB设备断开并重新连接时,软件无法与设备通信将停止工作,直到程序重新启动。即它仅在启动时检测USB设备。Windows能够看到该设备,但每次重新连接时都会执行完整的检测/驱动程序安装过程,即使它重新连接到同一个USB端口也是如此。这里的困难是我们没有办法修改第三方软件来在设备拔出后轮询合适的USB设备。因此,我们想问一下是否有人知道如何编写一个c++程序来保存USB状态/寄存器,防止Windows在重新连接时重新枚举USB端口,并恢复保存的状态/注册。如果是这样,我们将不胜感激在这方面的一些指导。当然,我们对解决此