2012-06-28 60 views
3

可以重載的一元&操作類內部爲:如何重載一元和外部類?

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

,以便它返回的地址。你會如何在一個類之外超載它:

struct X 
{ 
}; 

void* operator &(const X& x) 
{ 
    //how? 
} 

取參數的地址會導致無限遞歸。

+0

爲C++ 03相同的功能爲什麼你會使用操作符重載返回對象的地址?它已經這樣做了。 –

+0

@BoPersson當然有趣:) – AMCoder

回答

5

在C++ 11中,有template< class T > T* std::addressof(T& arg)

std::addressof

您也可以從Boost Utility

+0

只是在這裏猜測,但不會解決生成的代碼,遞歸調用相同的運算符? –

+0

否,因爲在獲取地址之前,內部'addressof'轉換爲char *。 – gwiazdorrr

+0

對,'addressof'代表你執行醜陋的轉換技巧以避免調用重載的'運算符&()'「 –