开发者

Why my implicit conversion function doesn't work?

开发者 https://www.devze.com 2023-04-03 15:18 出处:网络
I h开发者_运维问答ave a wrapper class and I want to modify the data and convert it back to its original type.

I h开发者_运维问答ave a wrapper class and I want to modify the data and convert it back to its original type.

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

I want the object of this class to implicitly convert back to unsigned __int64, but it failed.

Say,

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

Compiler gives C2678 error, no operator found or there is no acceptable conversion. It seems this function operator unsigned __int64 () const doesn't work.


To be more specific, compiler says there is no acceptable conversion. I cannot accept the complain, because I have already given a good one. Can someone legitimize it?


It doesn't work because you haven't created an operator>> overload for your class that takes an integer and does something with it.

I'm guessing you're trying to do a right shift on your int, but I'm not sure that overloading your operator>> is a good idea for that, as these operators in a context like that, are normally used for streaming. It might confuse a reader or maintainer of your code afterwards.

See here for more info on operator overloading

Perhaps rethink your implementation strategy?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号