看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《NIKE74731 (做遊戲的心)》之銘言: : ※ 引述《legnaleurc (CA)》之銘言: : : bool Register( int id, Creator c ) { : : if( f_.find( id ) != f_.end() ) { : : return false; : : } : : f_.insert( std::make_pair( id, c ) ); : : return true; : : } : : // register : : Factory::Register( 1, []() { : : return new D1; : : } ); : 感謝L大的幫忙 : 但原諒小弟基礎不好 : 想請問一下 : 為什麼Factory::Register中的第二個參數可以這樣寫呢? : Factory::Register( 1, []() { return new D1; } ) : ^^尤其是這裡 看不懂 : 以下恕刪~ 那是 C++0x 的 lambda expression 同義於 Base * tmp() { return new D1; } Factory::Register( 1, tmp ); 我註冊一個 id 為 1 的函式給 factory 之後只要傳入 1 就可以找到這個之前註冊好的函式去生成 D1 如果主要是用 VC10 就別管 lambda expression 了 Bug 太多, 而且大概到 SP1 也不會修正 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.96.118.199
NIKE74731:我還在用VC2005呢 06/19 23:57
loveme00835:lambda expression會產生的是匿名類別的物件,具有多 06/20 00:56
loveme00835:載運算子,再加上你沒有指定回傳型態,會做隱式轉型 06/20 00:58
loveme00835:如果是把該類實作之C函式位址記起來,呼叫時反而少了t 06/20 01:02
loveme00835:his引數,目前來看可能會出問題,細節還要參考一下FDI 06/20 01:03
loveme00835:S,我之前有在code project看過一個可能的實作,也有 06/20 01:06
loveme00835:人這樣寫,使用lambda的用途其實是在已知呼叫對象情況 06/20 01:07
loveme00835:下做最佳化 06/20 01:08
loveme00835:其他其實還有side effect的問題XD 06/20 01:12
angleevil:Orz c++怎麼一直再長大阿 06/20 09:05
littleshan:C++: 看看我!我體內的怪物已經長這麼大囉! 06/20 10:16
angleevil:真想把這怪物打抑制生長劑,OO都還沒搞熟,stl一直在長大 06/20 10:22
james732:要說出「我會C++」比告白還要困難了....XDDD 06/20 10:23
angleevil:所以超哥可以去告白了 06/20 21:17
VictorTom:賀超哥板標取得XD 說真的, 小弟我現在真的不敢在履 06/20 23:34
VictorTom: 歷表裡寫說懂C++, 哪怕是一點Orz 06/20 23:35