Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定某个值是否在C+中的枚举类型中定义+;? 我需要检查在EnUM类型中是否定义了某些值,或者在运行时是否在C++中定义。该需求可以通过C#轻松实现(请参阅以下代码)。但是C++在运行时没有类型信息(据我所知)。strong>有解决办法吗?_C#_C++_Enums - Fatal编程技术网

如何确定某个值是否在C+中的枚举类型中定义+;? 我需要检查在EnUM类型中是否定义了某些值,或者在运行时是否在C++中定义。该需求可以通过C#轻松实现(请参阅以下代码)。但是C++在运行时没有类型信息(据我所知)。strong>有解决办法吗?

如何确定某个值是否在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

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++11标准引入了更多的类型安全性,不仅仅是一个带有值的随机变量。

有解决方法,但它以的形式出现,非常冗长。这个库的名字来源于它是纯编译时模板元编程库和运行时的混合体


fusion允许在编译时初始化和使用向量或映射,也可以在运行时使用

最合适的解决方案是重新设计整个事物,而不是像这样使用C++枚举。它与C#enum不同,它们的不同程度足以使您不应将它们视为同一事物,正如您认为union和enum是同一事物一样。清除你的C语言解决方案,设计C++解决方案。


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

“这增加了维修性的复杂性”——在运行时这样做会增加调试和维护实际的成本,你能给出一个小的C++示例代码吗?你想在哪里使用这个枚举?为什么枚举不是按顺序写的?简短的回答:不。答案是:想要/使用它,这表明你的设计可能不适合C++(我几乎可以说它只是一个很差的设计,显然是足够普通的,C语言有一个创可贴来帮助人们做这样糟糕的设计)。。这正是使用包装器类的另一个很好的理由,或者这个非官方扩展的enum:(名为enum_rev4.6.zip的文件)最终,我重新设计了整个东西。Enum已在解决方案中消失。谢谢!