看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《jackwei (吐司)》之銘言: : 感謝 firejox, legnaleurc, loveme00835 版友的幫忙 : 根據大家提供的關鍵字 : 我在網路上找到這份資料解決了我的問題 : http://0rz.tw/hsD8F : 簡單說就是用 functor 來取代 function (我也不太懂 第一次接觸這個東西) : 還是不太知道為什麼 member function 必須是 static : 而用 functor 卻不用 重點不是 functor, 而是 "member" member function 要怎麼 call? 一定是如下形式 this->method( ... ) 但是光用 &SA::method, 編譯器只知道這是 SA 的一個 member function pointer 卻不知道 this 指向哪裡? 是哪個 object 要做這個 member function call? 而 static member function 就沒這個問題, 因為它只是一個可以 存取 SA 所有 member 的普通 function 而已 : 至於怎麼像 legnaleurc 版友說的 bind 一個 instance : 可以麻煩再給多一點說明嗎 謝謝 : 用在我的例子 code 如下 : class SA : { : .... : struct doCompare : { : const SA& mySA; : doCompare(const SA& sa) : mySA(sa) {} : bool operator() (const int &i, const int &j){ : return mySA.Gij[mySA.tempCompareStandard][i] > : mySA.Gij[mySA.tempCompareStandard][j]; : } : }; : ..... : }; : void SA::SomeFunction() : { : ..... : for(int i=0;i<size;i++) : { : for(int j=0;j<size;j++) gainListSorted[i][j] = j; : tempCompareStandard = i; : sort(gainListSorted[i], gainListSorted[i]+size, doCompare(*this)); : } : ..... : } sort( begin, end, std::bind( &SA::compare, this, std::placeholder::_1, std::placeholder::_2 ) ); (舊一點的 compiler 要用 std::tr1, 再舊一點的只能用 boost) 這樣基本上是達成了你原本要用 member function 做 comparator 的目的 原理跟你這篇的寫法差不多, 只是會少寫一些 code -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.36.138 ※ 編輯: legnaleurc 來自: 114.37.36.138 (10/25 03:17)
tomap41017:推C++0x 10/25 12:07