c++ - 这个操作符方法有什么作用?
问题描述
我正在处理一些由其他人生成的类。下面是课程的一部分,我删除了大部分,因为它与这个问题无关
struct OrderStatus {
enum Value {
New = (char)48,
PartiallyFilled = (char)49,
Filled = (char)50,
Cancelled = (char)52,
Replaced = (char)53,
Rejected = (char)56,
Expired = (char)67,
Undefined = (char)85,
NULL_VALUE = (char)0
};
private:
Value m_val;
public:
explicit OrderStatus(int v) : m_val(Value(v)) {}
explicit OrderStatus(size_t v) : m_val(Value(v)) {}
OrderStatus() : m_val(NULL_VALUE) {}
constexpr OrderStatus(Value v) : m_val(v) {}
operator Value() const { return m_val; }
};
两个问题:
做什么
operator Value()
?我将使用此类的一个实例,并希望
switch
对该实例执行操作,m_val
但这是私有的。这可能吗?
解决方案
正如评论中所指出的,该Value()
运算符是一个隐式转换运算符;由于这个成员,您可以只使用OrderStatus
该类的一个实例来使用其(否则无法访问)m_val
成员。您可以将其用作enum
类型的变量OrderStatus::Value
。
这是在 a 中使用它的简短示例switch
:
#include <iostream>
//
// Insert the code from your question here!
//
int main()
{
OrderStatus q(48);
switch (q) {
case OrderStatus::New:
std::cout << "New";
break;
default:
std::cout << "Something else!";
}
std::cout << std::endl;
return 0;
}
推荐阅读
- sql - 如何完全重写 SQL 索引?
- c++ - cin可以连接到字符串变量吗?
- spring - 运行测试时,Spring autoconfigure.exclude 在 Apple Silicon M1 上不起作用
- assembly - 为什么我在不存在的线路上出现错误?[纳斯姆]
- c# - 为什么使用 FromSqlRaw 时 AsEnumerable 不起作用
- c# - 如何解决以下错误?:错误 CS1022 和错误 CS0116
- python - RecursionError,获取对象的str时超出了最大递归深度,这是什么错误?
- github - 使用标签名称运行 Github 操作 - 仅针对添加的最新标签运行
- java - Java Auto Clicker 不发送点击到 Minecraft 基岩版窗口,但发送点击到所有其他窗口和桌面正常
- javascript - jquery UI 图像可调整大小但不可拖动?