如何确定某个值是否在C+中的枚举类型中定义+;? 我需要检查在EnUM类型中是否定义了某些值,或者在运行时是否在C++中定义。该需求可以通过C#轻松实现(请参阅以下代码)。但是C++在运行时没有类型信息(据我所知)。strong>有解决办法吗?
PS:在我的项目中,枚举类型定义了数百个值,因此我不想复制源代码中的值(例如,创建一个映射,并将所有有效值推送到其中),这些源代码实现了增加可维护性复杂性的逻辑如何确定某个值是否在C+中的枚举类型中定义+;? 我需要检查在EnUM类型中是否定义了某些值,或者在运行时是否在C++中定义。该需求可以通过C#轻松实现(请参阅以下代码)。但是C++在运行时没有类型信息(据我所知)。strong>有解决办法吗?,c#,c++,enums,C#,C++,Enums,PS:在我的项目中,枚举类型定义了数百个值,因此我不想复制源代码中的值(例如,创建一个映射,并将所有有效值推送到其中),这些源代码实现了增加可维护性复杂性的逻辑 enum BoFormObjectEnum { fo_Items = 4, fo_SalesEmployee = 53, fo_TransactionTemplates = 55, fo_JournalPosting = 30, fo_CheckForPayment = 57, fo_Pa
enum BoFormObjectEnum
{
fo_Items = 4,
fo_SalesEmployee = 53,
fo_TransactionTemplates = 55,
fo_JournalPosting = 30,
fo_CheckForPayment = 57,
fo_PaymentTermsTypes = 40,
...
}
class Program
{
static void Main(string[] args)
{
var array = Enumerable.Range(1, 60);
foreach (var item in array)
{
if (Enum.IsDefined(typeof(BoFormObjectEnum), item))
// do some logic
else
// do some other logic
}
}
}
你所寻找的是C++,它没有提供这个特性,但是有。
此外,新的C++11标准引入了更多的类型安全性,不仅仅是一个带有值的随机变量。有解决方法,但它以的形式出现,非常冗长。这个库的名字来源于它是纯编译时模板元编程库和运行时的混合体
fusion允许在编译时初始化和使用向量或映射,也可以在运行时使用
最合适的解决方案是重新设计整个事物,而不是像这样使用C++枚举。它与C#enum不同,它们的不同程度足以使您不应将它们视为同一事物,正如您认为union和enum是同一事物一样。清除你的C语言解决方案,设计C++解决方案。
最简单的方法,尤其是如果枚举值不经常更改(如果经常更改,为什么它们是硬编码的枚举?),就是“咬紧牙关”,创建一个集合或一个具有有效值的映射,当您想知道某个数字是否定义为枚举时,测试它是否在集合中,或者是否还需要名称,然后使用Map,这样既可以将值作为int,也可以将名称包含为字符串。“这增加了维修性的复杂性”——在运行时这样做会增加调试和维护实际的成本,你能给出一个小的C++示例代码吗?你想在哪里使用这个枚举?为什么枚举不是按顺序写的?简短的回答:不。答案是:想要/使用它,这表明你的设计可能不适合C++(我几乎可以说它只是一个很差的设计,显然是足够普通的,C语言有一个创可贴来帮助人们做这样糟糕的设计)。。这正是使用包装器类的另一个很好的理由,或者这个非官方扩展的enum:(名为enum_rev4.6.zip的文件)最终,我重新设计了整个东西。Enum已在解决方案中消失。谢谢!