gpt4 book ai didi

c# - 如何识别某个值是否在 C++ 的枚举类型中定义?

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:48 26 4
gpt4 key购买 nike

我需要在 C++ 运行时检查某些值是否在枚举类型中定义。该需求可以通过C#轻松实现(引用以下代码)。但是 C++ 在运行时没有类型信息(据我所知)。 有解决办法吗?

PS:在我的项目中,枚举类型定义了数百个值,所以我不想在源代码中复制这些值(例如,创建一个映射并将所有有效值推送到其中)来实现增加的逻辑可维护性的复杂性。

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++ 枚举。它与 C# enum 不同,它们完全不同,您不应该将它们视为同一事物,就像您认为 union 和 enum 是同一事物一样。清除 C# 解决方案,设计 C++ 解决方案。

最简单的,特别是如果枚举值不经常改变(如果改变,为什么它们是硬编码的枚举?),就是“咬紧牙关”并创建一个具有有效值的集合或映射,并且当您想知道某个数字是否被定义为枚举时,测试它是否在集合中,或者您是否还需要名称,然后使用 map,这样您就可以同时包含值作为 int 和名称作为字符串。

关于c# - 如何识别某个值是否在 C++ 的枚举类型中定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13356546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com