Re: [問題] template一問

看板C_and_CPP作者 (CA)時間14年前 (2011/06/19 22:11), 編輯推噓3(3013)
留言16則, 6人參與, 最新討論串7/9 (看更多)
※ 引述《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

06/19 23:57, , 1F
我還在用VC2005呢
06/19 23:57, 1F

06/20 00:56, , 2F
lambda expression會產生的是匿名類別的物件,具有多
06/20 00:56, 2F

06/20 00:58, , 3F
載運算子,再加上你沒有指定回傳型態,會做隱式轉型
06/20 00:58, 3F

06/20 01:02, , 4F
如果是把該類實作之C函式位址記起來,呼叫時反而少了t
06/20 01:02, 4F

06/20 01:03, , 5F
his引數,目前來看可能會出問題,細節還要參考一下FDI
06/20 01:03, 5F

06/20 01:06, , 6F
S,我之前有在code project看過一個可能的實作,也有
06/20 01:06, 6F

06/20 01:07, , 7F
人這樣寫,使用lambda的用途其實是在已知呼叫對象情況
06/20 01:07, 7F

06/20 01:08, , 8F
下做最佳化
06/20 01:08, 8F

06/20 01:12, , 9F
其他其實還有side effect的問題XD
06/20 01:12, 9F

06/20 09:05, , 10F
Orz c++怎麼一直再長大阿
06/20 09:05, 10F

06/20 10:16, , 11F
C++: 看看我!我體內的怪物已經長這麼大囉!
06/20 10:16, 11F

06/20 10:22, , 12F
真想把這怪物打抑制生長劑,OO都還沒搞熟,stl一直在長大
06/20 10:22, 12F

06/20 10:23, , 13F
要說出「我會C++」比告白還要困難了....XDDD
06/20 10:23, 13F

06/20 21:17, , 14F
所以超哥可以去告白了
06/20 21:17, 14F

06/20 23:34, , 15F
賀超哥板標取得XD 說真的, 小弟我現在真的不敢在履
06/20 23:34, 15F

06/20 23:35, , 16F
歷表裡寫說懂C++, 哪怕是一點Orz
06/20 23:35, 16F
文章代碼(AID): #1D_WEHb3 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1D_WEHb3 (C_and_CPP)