此运算符方法做什么?

问题描述 投票:0回答:2

我正在使用其他人生成的某些类。下面是该课程的一部分,我删除了大部分内容,因为它与该问题无关

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,但这是私有的。这可能吗?

c++ operator-keyword
2个回答
1
投票

如注释中所指出,Value()运算符是implicit conversion operator;由于这个成员,您只能使用OrderStatus类的实例才能使用其(否则无法访问)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;
}

0
投票

()的寄生运算符struct已被重载,因此您可以通过使用它来获取其私有m_val变量:

© www.soinside.com 2019 - 2024. All rights reserved.