#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(); } };
Комментариев нет:
Отправить комментарий