Управление преобразованием типов в условной операции
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 25.08.21 16:22
Оценка:
Есть у меня маленький класс Handle, реализующий RAII для виндового типа HANDLE (общий тип для объектов ядра). Сам тип HANDLE определен в винде, как void *. В моем классе, как положено, есть конструктор с параметром типа HANDLE, и метод operator HANDLE.

Все было прекрасно, пока я однажды не написал:

HANDLE Sync = (Timer != 0)? Timer : Event;

где Timer — объект класса Handle, а Event — обычная переменная типа HANDLE.

Я ожидал, что компилятор преобразует Timer к HANDLE, а он, наоборот, преобразует Event к объекту класса Handle, создавая временный объект, и тут же уничтожая его, что приводит к вызову деструктора и закрытию хэндла.

Такая же хрень происходит, если вместо HANDLE использовать int или другой интегральный тип.

Можно ли как-то указать в классе, чтобы в подобных случаях объект преобразовывался к простому типу через соответствующий метод, а не наоборот?
ternary conversion operator
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.