我有一个枚举SDKEnum
,我需要将其转换为AppEnum
。我需要对其进行转换,因为我的项目将是.NET SDK的包装,并且我无法发布该SDK的内部枚举。所以我需要写我的“自己的”。
现在,对于每个枚举,我都需要一种执行以下操作的方法:
AppEnum GetAppEnum (SDKEnum type)
{
switch (type)
{
// Return the correct constant, since AppEnum and SDKEnum have equal constants
}
}
这样,我将SDK枚举放入该方法中,并获取对应的App枚举。
我不想为我拥有的每个枚举编写该方法。有没有更通用或更完善的方法?
对于C ++ / CLI / C ++,我是C#的新手。
非常感谢!
答案 0 :(得分:1)
我不知道这些枚举的定义方式,但是很可能它们是(旧的)C风格的enum
或(自C ++ 11起)强类型的enum class
。
下面的代码将被编译,因此static_cast
是您的朋友:
namespace
{
enum OLD_ENUM1 { A=1,B=2};
enum OLD_ENUM2 { C=1,D=2};
enum class NEW_ENUM1 { A=1,B=2};
enum class NEW_ENUM2 { A=1,B=2};
}
int main()
{
OLD_ENUM1 o1(A);
OLD_ENUM2 o2(static_cast<OLD_ENUM2>(o1));
NEW_ENUM1 n1(NEW_ENUM1::A);
NEW_ENUM2 n2(static_cast<NEW_ENUM2>(n1));
return EXIT_SUCCESS;
}
请注意,对于OLD_ENUM1和OLD_ENUM2,我无法对枚举值使用相同的名称,因为它们是在没有命名空间的情况下寻址的。对于强类型的枚举,我可以这样做,因为因为它们是类,所以它们具有自己的名称空间。
答案 1 :(得分:0)
好吧,所以诀窍在于定期进行以下强制转换:
enum SDKEnum
{
One, // (2)
Two, // (1)
Three // (0)
}
enum AppEnum
{
One,
Two,
Three
}
AppEnum MethoThatNeededTheConversion(SDKEnum sdkenum)
{
// DoStuff
return static_cast<AppEnum>(sdkenum); // Wrong int values returned
}
对我来说重要的是:
除了常数SDKEnum
以外,AppEnum
还具有其他整数值。因此,我创建了一个测试应用程序,并给出了这些整数值,以便可以同步两个枚举并使用常规强制转换。
感谢@all