Как я могу использовать «operator X ()», определенный в классе?

#c #operators

#c #операторы

Вопрос:

Я относительно новичок в C , и это объявление меня смутило:

Service.h:

 class ServiceHandle {
  public:
    ServiceHandle(SC_HANDLE h) : handle(h) {}
    ...
    operator SC_HANDLE() const {return handle;}
  protected:
    SC_HANDLE handle;
};
  

Я создал ServiceHandle объект с помощью других средств, отличных от конструктора, указанного здесь. Я хотел бы получить фактическое SC_HANDLE значение для передачи ChangeServiceConfig , как мне к нему добраться? Я предполагаю, что это как-то связано с оператором, но я не могу понять, как его использовать.

Ответ №1:

Вы просто используете объект типа ServiceHandle в выражении , которое ожидает tht SC_HANDLE . Оператор, о котором вы говорите, является оператором приведения к SC_HANDLE . Этот оператор «используется» автоматически.

Ответ №2:

Это оператор приведения. Это вызвало бы это:

 ServiceHandle s(some handle);
SC_HANDLE h = (SC_HANDLE)s;
  

Комментарии:

1. SC_HANDLE h = s; будет достаточно. Избегайте приведений в стиле C, таких как fire.

2. Согласен. Написание приведения в стиле C заставило меня почувствовать себя немного больным.