Если оператор перегружен для класса C ++, как я могу вместо этого использовать оператор по умолчанию? - PullRequest
5 голосов
/ 17 июля 2009

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

_com_ptr_t<Interface> variable;

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

Ответы [ 3 ]

7 голосов
/ 17 июля 2009

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

3 голосов
/ 17 июля 2009

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

template<typename T>
T *GetRealAddr(T &t)
    { return reinterpret_cast<T*>(&reinterpret_cast<unsigned char &>(t)); }
0 голосов
/ 17 июля 2009

& variable.GetInterfacePtr ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...