[問題] overload -> of a raw pointer

看板C_and_CPP作者 (read and be read)時間10年前 (2015/09/01 02:23), 編輯推噓2(207)
留言9則, 2人參與, 最新討論串1/1
對raw pointer而言,dereference operator是否能夠被覆載? 例如: class C1 { public: std::string str; void show( void ){ std::cout << str; } }; template <typename T> class TC2 { public: T* mPtr; TC2( T* ptr ): mPtr( ptr ){} T* operator->() { return mPtr; } }; int main() { C1 *pC1 = new C1; TC2<C1> *pTC2 = new TC2<C1>( pC1 ); //succeed (*pTC2)->show(); //fail //pTC2->show(); delete pC1; delete pTC2; } 請問pTC2->show();要怎麼做,才能夠如同(*pTC2)->show();一樣執行? 從結果與相關資訊看來,語意上->的覆載是對一個 物件實體(*pTC2) 有作用 但我沒有找到關於如何對一個raw pointer的->運算子做覆載。 亦或者raw pointer的->運算子是根本不能被覆載的?若是如此,請問在standard中 哪個部分有指出這件事,謝謝! -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.53.96 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1441045432.A.287.html

09/01 03:40, , 1F
operator-> 是做為其左邊式子的 member function 為定義
09/01 03:40, 1F

09/01 03:41, , 2F
其不含參數, 亦無法做為 non-member 定義
09/01 03:41, 2F

09/01 03:42, , 3F
因此無法對 pointer (此為一 primitive type) 覆載 ->
09/01 03:42, 3F

09/01 03:50, , 5F
了解,謝謝。是說raw pointer是primitive type還是
09/01 03:50, 5F

09/01 03:50, , 6F
compound type?
09/01 03:50, 6F

09/01 22:58, , 7F
在Standard中13.3.1.2-1有指出若運算元的類別若非class
09/01 22:58, 7F

09/01 22:59, , 8F
或enumeration, 則使用built-in operator
09/01 22:59, 8F

09/02 00:38, , 9F
指標都是 primitive, 故以這理由它依然不能被覆載
09/02 00:38, 9F
文章代碼(AID): #1Lv9kuA7 (C_and_CPP)