Страницы

Поиск по вопросам

пятница, 21 июня 2019 г.

Запрет неявного преобразования

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; // Как запретить неявное преобразование для данного оператора/ группы операторов? };


Ответ

Неявное преобразование можно запретить так:
struct A { explicit operator B(); };
Теперь только явно можно преобразовать A в B

Если же хочется оставить неявное преобразование в целом, но в частных случаях оно нежелательно, тогда можно воспользоваться таким трюком:
#include //... struct B { template::value>> B operator + (TB) { return B(); } };

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

Отправить комментарий