【发布时间】:2010-11-11 16:08:24
【问题描述】:
_com_ptr_ 有一个带有副作用的重载 operator&()。如果我有一个变量:
_com_ptr_t<Interface> variable;
如何在不调用重载运算符并触发副作用的情况下检索其地址(_com_ptr_t
【问题讨论】:
-
您想要
_com_ptr_t<Interface>*还是Interface*?
_com_ptr_ 有一个带有副作用的重载 operator&()。如果我有一个变量:
_com_ptr_t<Interface> variable;
如何在不调用重载运算符并触发副作用的情况下检索其地址(_com_ptr_t
【问题讨论】:
_com_ptr_t<Interface>* 还是Interface*?
&variable.GetInterfacePtr();
【讨论】:
我在 ISO 会议上看到了这个案例,因为它破坏了一些 offsetof() 宏实现 (LWG 273)。解决办法:&reinterpret_cast<unsigned char&>(variable)
【讨论】:
operator unsigned char 本身,reinterpret_cast 到 unsigned char& 也应该可以工作。
我定义了这个效用函数:
template<typename T>
T *GetRealAddr(T &t)
{ return reinterpret_cast<T*>(&reinterpret_cast<unsigned char &>(t)); }
【讨论】: