Почему моя неявная функция преобразования не работает? - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть класс-оболочка, и я хочу изменить данные и преобразовать их обратно в исходный тип.

class A
{
public:
    A ( unsigned __int64 _a ) : a (_a)
    {
    }
    operator unsigned __int64 () const
    {
        return a;
    }
    unsigned __int64 a;
}; 

Я хочу, чтобы объект этого класса неявно преобразовал обратно в unsigned __int64, но это не удалось.

Скажите,

 A a( 0x100ull );
 unsigned __int64 b = (a >> 16);  // Error

Компилятор выдает ошибку C2678, оператор не найден или нет приемлемого преобразования. Кажется, эта функция operator unsigned __int64 () const не работает.


Чтобы быть более конкретным, компилятор говорит there is no acceptable conversion. Я не могу принять жалобу, потому что я уже дал хорошую. Может ли кто-нибудь узаконить это?

1 Ответ

3 голосов
/ 08 сентября 2011

Это не работает, потому что вы не создали перегрузку operator>> для вашего класса, которая принимает целое число и что-то с ним делает.

Я предполагаю, что вы пытаетесь сделать правильный сдвиг для вашего int, но я не уверен, что перегрузка вашего operator>> хорошая идея для этого, так как эти операторы в подобном контексте обычно используется для потоковой передачи. Это может запутать читателя или сопровождающего вашего кода впоследствии.

Подробнее о перегрузке оператора см. Здесь

Возможно, переосмыслить вашу стратегию реализации?

...