#cpp
struct B; struct A { operator B(); }; struct B { B operator + (B) {return B();} }; A::operator B() { return B(); } int main() { A x; B y; y+x; // Как запретить неявное преобразование для данного оператора/ группы операторов? };
Ответы
Ответ 1
Неявное преобразование можно запретить так: struct A { explicit operator B(); }; Теперь только явно можно преобразовать A в B Если же хочется оставить неявное преобразование в целом, но в частных случаях оно нежелательно, тогда можно воспользоваться таким трюком: #include//... struct B { template ::value>> B operator + (TB) { return B(); } };
Комментариев нет:
Отправить комментарий