gpt4 book ai didi

c++ - 如何转换枚举?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:53 26 4
gpt4 key购买 nike

我有一个第三方无作用域枚举(我无法修改),我真的很想将其转换为我自己的有作用域枚举。我如何提供转换运算符之类的东西?

我想做的是这样的:

#include <iostream>
enum ThirdPartyLetter {
A=4,
B=5
};

enum class MyNumber {
ONE=1,
TWO=2

// This doesn't compile, of course
/*Number(const ThirdPartyLetter& rhs) {
if(rhs == ThirdPartyLetter::A) {
return ONE;
}
else {
return TWO;
}
}*/
};


int main() {
ThirdPartyLetter letter = ThirdPartyLetter::A;
MyNumber number = static_cast<MyNumber>(letter);
// Without the cast, this prints 4 (an invalid enum value!)
std::cout << int(number) << std::endl;
}

有没有办法提供从 ThirdPartyNumberMyNumber 的某种转换?

最佳答案

在 C++ 编译时执行此操作的惯用方法是使用特征。
例如:

enum Foo { ONE, TWO };
enum Bar { THREE, FOUR };

template<Foo> struct conv;
template<> struct conv<Foo::ONE> { static constexpr Bar value = Bar::THREE; };
template<> struct conv<Foo::TWO> { static constexpr Bar value = Bar::FOUR; };

如果您想在运行时执行此操作,也许 switch 非常适合。
无论如何,您仍然可以使用特征来集中您的转换逻辑并执行如下操作:

Bar get(Foo choice) {
switch(choice) {
case Foo::ONE:
return conv<ONE>::value;
case Foo::TWO:
return conv<TWO>::value;
}
}

关于c++ - 如何转换枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527235/

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