我有一个带有两个值的枚举类,我想创建一个接收一个值并返回另一个值的方法。我还想保持类型安全(这就是我使用枚举类而不是枚举的原因)。
http://www.cplusplus.com/doc/tutorial/other_data_types/ 没有提到任何关于方法的内容但是,我的印象是任何类型的类都可以有方法。
原文由 bsky 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个带有两个值的枚举类,我想创建一个接收一个值并返回另一个值的方法。我还想保持类型安全(这就是我使用枚举类而不是枚举的原因)。
http://www.cplusplus.com/doc/tutorial/other_data_types/ 没有提到任何关于方法的内容但是,我的印象是任何类型的类都可以有方法。
原文由 bsky 发布,翻译遵循 CC BY-SA 4.0 许可协议
基于 jtlim的回答
enum ErrorType: int {
noConnection,
noMemory
};
class Error {
public:
Error() = default;
constexpr Error(ErrorType type) : type(type) { }
operator ErrorType() const { return type; }
constexpr bool operator == (Error error) const { return type == error.type; }
constexpr bool operator != (Error error) const { return type != error.type; }
constexpr bool operator == (ErrorType errorType) const { return type == errorType; }
constexpr bool operator != (ErrorType errorType) const { return type != errorType; }
String description() {
switch (type) {
case noConnection: return "no connection";
case noMemory: return "no memory";
default: return "undefined error";
}
}
private:
ErrorType type;
};
Error err = Error(noConnection);
err = noMemory;
print("1 " + err.description());
switch (err) {
case noConnection:
print("2 bad connection");
break;
case noMemory:
print("2 disk is full");
break;
default:
print("2 oops");
break;
}
if (err == noMemory) { print("3 Errors match"); }
if (err != noConnection) { print("4 Errors don't match"); }
原文由 Vasily Bodnarchuk 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
不,他们不能。
我可以理解,C++11 中强类型枚举的
enum class
部分似乎暗示您的enum
具有class
的特征案子。我有根据的猜测是,关键字的选择受到了我们在 C++11 之前用于获取作用域枚举的模式的启发:但是,这只是语法。同样,
enum class
不是class
。