Если оператор перегружен для класса C++, как я мог бы вместо этого использовать оператор по умолчанию?

_com_ptr_ имеет перегруженный оператор &() с побочным эффектом. Если у меня есть переменная:

_com_ptr_t<Interface> variable;

Как я могу получить его адрес (указатель _com_ptr_t*), не вызывая перегруженный оператор и не вызывая побочный эффект?

3 ответа

Решение

Я видел этот случай всплывающим на собрании ISO, поскольку он нарушал некоторые реализации макроса offsetof() (LWG 273). Решение: &reinterpret_cast<unsigned char&>(variable)

Я определяю эту функцию полезности:

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

& Variable.GetInterfacePtr();

Другие вопросы по тегам