2014-07-03 47 views
1

從本質上講,我做了一個類,給它一個支架運營商,但由於它的更好,我把它作爲一個指針,而不是一個領域,我必須這樣使用它:有什麼方法可以爲類的指針定義括號運算符嗎?

auto* p = new wannabeArray(); 
(*p)[1] = 5; 

有什麼辦法使p [1]正常工作?

+2

爲什麼「把它作爲指針而不是字段要好得多」? –

回答

4

p[1]的含義已經由該語言定義。它不能改變爲一個指針。您只能爲用戶定義的類型定義。

1

可能做一個類來保存指針,例如,

class wannabeHolder: boost::noncopyable 
{ 
    wannabeArray *p; 
public: 
    wannabeHolder(wannabeArray *p): p(p) {} 

    wannabeArray *operator->() { return p; } 
    wannabeArray::value_type &operator[](size_t n) { return (*p)[n]; } 
}; 

但是,你正在重塑這裏的一部分車輪,或至少是一些輻條。正如Alf所建議的那樣,組織代碼可能比更好的方式來做這樣的事情。

相關問題