Cocos2dX 開發疑難雜症

開發心得、 經驗分享整理
  • About Me
  • Archive
  • feeds

Posts match “ lambda ” tag:

over 7 years ago

Cocos2dx - 傳入 Lambda 當作函式參數

自從 C++ 11 全面在 Cocos2dx 中使用後, 使得原本的Cocos2dx 更為強大, 其中筆者覺得造成改變最大的因素, 就有 Lambda 語法。

適用範圍: 任何想用 Lambda 當作 Callback 函式的時候

Step1: 搞清楚Lambda語法 是如何使用

  • C++ Lambda 語法簡介

Step2: 弄清楚C++ Function用法

  • C++ function 用法

Step3: 在標頭檔將函式結構寫出來

void login(string email, function< void(shared_ptr< CustomClass > )> onSuccess);
  • 使用 Email 來登入, 等函式完成登入後將對應的變數傳入 onSuccess Callback
  • function< void(shared_ptr< CustomClass > )> onSuccess 為一個 Callback 呼叫, 可使用Lambda語法填入

Step4 在對應的程式碼中完成動作後呼叫 Callback

void login(string email, function< void(shared_ptr< CustomClass > )> onSuccess){
.. 網路操作 .. 
.. 背景操作 .. 
... 
onSuccess( 丟回參數 );
}

Step5: 在其他地方使用Lambda語法當作Callback傳入函式

Class->login("lenny@email.com", [](shared_ptr< CustomClass > ){ 
    CCLOG("Login Success");
});

這在手機開發環境中的網路函式中, 好用到掉渣啊!


最後, 我們有個關於 Cocos2d-x 的Facebook社團, 如果有任何疑難問題, 歡迎到社團發問。

Cocos2dx Taiwan 開發者社團

  • 網路
  • cocos2dx
  • lambda
  • function
  • 傳函式參數
  • August 05, 2015 00:15
  • Permalink
  • Comments
 
over 7 years ago

C++ Lambda 語法簡介

Lambda expression 是一種匿名函數的表示方式,它可以讓程式設計師將函數的內容直接以 inline 的方式寫在一般的程式碼之中,省去另外定義函數的麻煩,使用時機跟 functor 與 function pointer 類似,一般的狀況都是使用 lambda expression 定義一個匿名的函數,然後再將此函數當作另外一個函數的傳入參數來使用。

可以說類 Lambda 語法的形式, 在各種現代的語言中 (ex. Java, Swift, Obj-C ...) 都有類似的實現, 在需要 Callback函式呼叫時尤其好用。

Lambda expression 基本的用法

Class A;

[ A ] (int x) -> int
{
 int n = x + y;
 return n;
}
  • A 為傳入的變數, 若需要引用lambda函式外的變數, 由此傳入, 預設為使用傳值的方式(Call by value)
  • int x 為傳入函式的變數
  • -> int 為宣告Lambda函式回傳變數型態的語法

Lambda 簡單範例

int main() {
auto square = [](int x) -> int { return x*x; };
cout << square(3) << endl;
}
  • cout結果: 9

Lambda 語法參考

  • C++11 Lambda Expression 語法教學與範例
  • c++
  • lambda
  • August 05, 2015 21:18
  • Permalink
  • Comments
 

Copyright © 2013 lennychen . Powered by Logdown.
Based on work at subtlepatterns.com.