如果运算符为C ++类重载,我怎么能使用默认运算符呢?

时间:2009-07-17 11:03:24

标签: c++ operator-overloading

_com_ptr_有一个带有副作用的重载运算符&()。如果我有一个变量:

_com_ptr_t<Interface> variable;

如何在不调用重载运算符并触发副作用的情况下检索其地址(_com_ptr_t&lt;接口&gt; *指针)?

3 个答案:

答案 0 :(得分:7)

我见过这种情况会在ISO会议中弹出,因为它打破了一些offsetof()宏实现(LWG 273)。解决方案:&reinterpret_cast<unsigned char&>(variable)

答案 1 :(得分:3)

我定义了这个效用函数:

template<typename T>
T *GetRealAddr(T &t)
    { return reinterpret_cast<T*>(&reinterpret_cast<unsigned char &>(t)); }

答案 2 :(得分:0)

&安培; variable.GetInterfacePtr();