Что мне не нравится, так это то, что он асимметричный.
Например, вы действительно хотели где-то получить
if(typesEqual(t1, t2) == Yes) {
do_something();
}
, но случайно вы написали
if(typesEqual(t1, t2)) {
do_something();
}
Кажется как-то странно / уродливо, что вы можете использовать логический трюк для Нет, но не для Да.
Я думаю, что решил бы это, переименовав функцию в tryCompareTypes(t1, t2)
, и изменив ваше перечисление на
enum Result {
Maybe,
No,
Yes
};
Таким образом, tryCompareTypes()
возвращает 0, если ему «не удалось» окончательно решить, равны ли типы, в противном случае он возвращает либо «Нет», либо «Да», оба из которых не равны нулю и, следовательно, указывают «успех».