这个运算符方法有什么作用?
What does this operator method do?
我正在处理一些由其他人生成的 classes。以下是class的一部分,因为与本题无关
,我已经删除了大部分
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()
是做什么的?
我将使用此 class 的一个实例,并希望对该实例的 m_val
执行 switch
,但这是私有的。这可能吗?
正如评论中指出的那样,Value()
运算符是一个 implicit conversion operator;由于这个成员,您可以只使用 OrderStatus
class 的实例来使用它的(否则无法访问)m_val
成员。您可以将其用作 enum
类型 OrderStatus::Value
.
的变量
这是一个在 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;
}
我正在处理一些由其他人生成的 classes。以下是class的一部分,因为与本题无关
,我已经删除了大部分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()
是做什么的?我将使用此 class 的一个实例,并希望对该实例的
m_val
执行switch
,但这是私有的。这可能吗?
正如评论中指出的那样,Value()
运算符是一个 implicit conversion operator;由于这个成员,您可以只使用 OrderStatus
class 的实例来使用它的(否则无法访问)m_val
成员。您可以将其用作 enum
类型 OrderStatus::Value
.
这是一个在 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;
}