Cocos2dX 開發疑難雜症

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

Posts match “ c++ ” tag:

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
 
over 7 years ago

C++ function用法

function 是一個舊用法新用, 主要可以用來取代舊有的 Function pointer 以及 Function object的寫法。
簡單的理解是可以把函式拿來像變數使用, 傳入其他的函式中。

function 的基本用法

  • 標頭檔 : #include < functional >
  • 範例: 宣告一個 function, 可以傳入一個 bool, 一個float當變數, 以及傳回一個int值

    function < int (bool, float) > nameOfFunction;
    

function 的範例

class fClass {
public:
  static int square (int x) {
     return x*x;
 };   
};

int main(int argc, const char * argv[]) {
    function< int (int) > squareFunction;
    squareFunction = fClass::square;
    cout<< squareFunction(3); 
    return 0;
}
  • cout 結果: 9

function 參考

  • 在 C++ 裡傳遞、儲存函式 Part 1:Function Pointer
  • C++ 11 function

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

Cocos2dx Taiwan 開發者社團

  • c++
  • function
  • Function Pointer
  • August 05, 2015 21:57
  • Permalink
  • Comments
 
almost 7 years ago

C++ 內建型別 (Built-in Type) 變數的初始化

C++ 內建型別會不會被自動初始化, 與它在哪裡被定義有關。

定義於函式主體外的任何變數都會獲得初值0。 定義於函式主體內的內建型別則無初值。

#include <iostream>
using namespace std;

int k;

void printVal (){ // <- 所謂的函式主體

    int i;
    cout<< i << endl;
    cout<< k << endl;
}

int main(){ // <- main 為例外的函式主體, 有賦值

    printVal();

    int m;
    cout << m << endl;

    return 0;
}

輸出結果:

i: 32767

k: 0

m: 0

未初始化的變數其實帶有一個值。 編譯器首先把變數 “放在” 記憶體某處, 然後把那塊記憶體的 bit 樣式當作那個變數的初值。

由於初始化會影響程式的結果是否正確, 未明確定義的變數往往會造成很難除錯的 bug 產生, 所以還是養成一律初始化每個變數的習慣會省自己很多麻煩。

  • C++
  • 變數
  • 初始化
  • 內建型別
  • April 19, 2016 06:55
  • Permalink
  • Comments
 
almost 7 years ago

C++ string 操作注意事項

string 的 size 操作和 empty 操作

常使用的 c++ 函式庫會附帶 size() 以及 empty() 操作, 前者是給予對應的長度, 後者是簡單的回傳是否為空。
需特別注意的是 size() 回傳的是一個 string::size_type, 而非常見的基礎型別。

string 和很多程式庫型別 - 定義有數個相關型別。 這些型別讓我們得以使用與機器無關的方式來運用程式庫型別。
size_type 被定義為某個 unsigned 型別 - unsigned int 或 unsigned long 的同義字, 足以保證代表任何 string 的大小。

任何用來存放 string size() 返回值得變數都應該是 string::size_type。 千萬別把 size() 返回值賦予一個 int 變數。

使用 int 除了 int 可以存放負值外, 某些機器上的 int 太小, 連合理的大型 strings 都無法處理。

將 strings 與 character string literals 相加

string 常使用的串接方式會有下面這種做法:

string s1 = "hello";
string s2 = "world";
string s3 = s1 + " " + s2;

這種做法有個需要特別注意的事項, 每個 + 運算子至少要有一個運算元的型別是 string

也就是說下面的語法是不合法的:

string s = "hello " + "world!";
  • C++
  • string
  • 注意事項
  • April 21, 2016 06:50
  • Permalink
  • Comments
 
almost 7 years ago

C++ 使用內建 GNU 編譯器或 Microsoft 編譯器

指令參考

在不同的編譯器和作業系統上, 叫出 C++ 編譯器的指令都不同。
GNU 編譯器的預設指令是 g++

Mac: 在 Terminal環境下

$ g++ prog1.cpp -o prog1

$ 為系統提示號。 這個指令會生成一個 prog1 或 prog1.exe

$ ./prog1

這指令可以執行對應生成的檔案

使用方式

g++ [option] filename

選項

-c : 只做編譯(不做連結)
-S : 輸出組譯碼
-E : 將預處理結果顯示
-o filename : 指定輸出檔名
-ansi : 程式要求依據ansi c標準
-Dmacro : 使定義巨集(marco)為有效
-Dmarco=defn : 使定義巨集(marco)為defn
-Wa,option : 將選項(option)傳給組譯器
-wl,option : 將選項(option)傳給連結器
-I : 追加include檔案的搜尋路徑
-L : 追加library檔案的搜尋路徑
-l : 指定連結的函式庫
-Wall : 顯示所有的警告訊息
-g : 編入除錯資訊(要使用GDB除錯一定要加)
-O2 : 做最佳化

Example:

g++ -o file a.c b.c c.c
g++ -Wall -g -o test test.c
g++ -Iinclude -Llibrary -lmy_lib -o test1 test1.c
g++ -c -o test3 test.c

  • C++
  • GNU
  • 指令參考
  • April 30, 2016 10:03
  • Permalink
  • Comments
 

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