我有一个包装类,我想修改数据并将其转换回原始类型。
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
。我不能接受这个抱怨,因为我已经给了一个好的抱怨。有人可以合法化吗?
答案 0 :(得分:3)
它不起作用,因为你没有为你的类创建一个operator>>
重载,它接受一个整数并用它做一些事情。
我猜你正试图对你的int做一个正确的转变,但是我不确定你的operator>>
是否是一个好主意,因为这些运算符在这样的上下文中,通常用于流式传输。之后可能会使代码的读者或维护者感到困惑。
See here for more info on operator overloading
或许重新考虑您的实施策略?