Страницы

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

суббота, 4 апреля 2020 г.

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

#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(); } };

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

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