2012-06-28 3 views
3

Вы можете перегрузить унарную & оператор внутри класса, как:Как перегрузить унарный и внешний класс?

struct X 
{ 
    void* operator &() 
    { 
     return this; 
    } 
}; 

так, что он возвращает адрес. Как бы вы перегрузили его за пределами класса:

Взятие адреса параметра приведет к бесконечной рекурсии.

+0

Зачем перегружать оператор вернуть адрес объекта? Это уже сделано. –

+0

@BoPersson для удовольствия, конечно :) – AMCoder

ответ

5

В C++ 11 есть template< class T > T* std::addressof(T& arg).

std::addressof

Вы также можете получить ту же функцию для C++ 03 из Boost Utility

+0

Просто угадывая здесь, но не обращался бы к генерации кода, который вызывает тот же оператор рекурсивно? –

+0

Нет, потому что внутренне 'addressof' отличает char и до получения адреса. – gwiazdorrr

+0

Правильно, 'addressof' выполняет от вашего имени" уродливые кастинговые трюки, чтобы избежать вызова перегруженного 'operator &()' " –

Смежные вопросы