为什么我的隐式转换功能不起作用?

时间:2011-09-08 00:02:18

标签: c++ casting implicit

我有一个包装类,我想修改数据并将其转换回原始类型。

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 个答案:

答案 0 :(得分:3)

它不起作用,因为你没有为你的类创建一个operator>>重载,它接受一个整数并用它做一些事情。

我猜你正试图对你的int做一个正确的转变,但是我不确定你的operator>>是否是一个好主意,因为这些运算符在这样的上下文中,通常用于流式传输。之后可能会使代码的读者或维护者感到困惑。

See here for more info on operator overloading

或许重新考虑您的实施策略?

相关问题