Что делает этот операторный метод? - PullRequest
0 голосов
/ 05 марта 2020

Я работаю с некоторыми классами, которые были созданы кем-то другим. Ниже приведен раздел класса, я удалил большую его часть, поскольку он не имеет отношения к этому вопросу

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, но это личное. Возможно ли это?

1 Ответ

2 голосов
/ 05 марта 2020

Как указано в комментариях, оператор Value() является оператором неявного преобразования ; благодаря этому члену вы можете просто использовать экземпляр класса 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...