量化交易系統開發程式碼部署方案丨合約量化系統開發技術成熟原始碼流程
回撥函式其實就是在一個函式裡面呼叫了另一個函式,而呼叫哪個函式是由呼叫回撥函式的人決定,舉個簡單例子:
int add(int a,int b){ return a+b;}int sub(int a,int b){ return a-b;}typedef int (*pfunc)(int a,int b);int func_callback(pfunc p,int a,int b){ return(*p)(a,b);}void main(void){ func_callback(add,1,2);//return 3 func_callback(sub,2,1);//return 1}複製
這裡的func_callback就是回撥函式,它的執行結果根據傳進來的函式指標p的實際指向函式不同而不同,即傳入加法add得到的是加法計算,傳入減法sub得到的是減法計算結果。
回撥函式的使用使得上層呼叫時僅需要同一個介面(func_callback)即可,而根據傳入的引數不同而呼叫到不同的底層結果。
例如add和sub是作業系統或BSP提供的一個功能。我們希望上層應用在呼叫時具有擴充性,即如果底層新增了新的功能例如乘除法(mul,div),我們無需修改上層應用的介面,僅需在傳入引數時增加新的引數(mul,div)即可。這樣底層提供的API具有了通用性,應用層無需修改呼叫api的介面即可增加新的使用方式。
回撥函式還有一個很好用的功能是和表驅動法結合:
表驅動法
表驅動法顧名思義就是類似 查表的方式實現功能,簡單地說,將程式中的分支判斷變為查表操作,簡單例子:
char getCharfromHex(unsigned char ucNum){ char ucNumChar = 0; if(ucNum < 10) { ucNumChar = ucNum + '0'; } else if(ucNum == 10) { ucNumChar = 'A'; } else if(ucNum == 11) { ucNumChar = 'B'; } else if(ucNum == 12) { ucNumChar = 'C'; } else if(ucNum == 13) { ucNumChar = 'D'; } else if(ucNum == 14) { ucNumChar = 'E'; } else if(ucNum == 15) { ucNumChar = 'F'; } else { return 0; } return ucNumChar;}複製
上面的操作是將一個16進位制數變為ASCII表示的字元,如果使用表驅動,則可以實現為:
CHAR aNumChars[] = {'0', '1', '2', /*3~9*/'A', 'B', 'C', 'D', 'E', 'F'};CHAR ucNumChar = aNumChars[ucNum % sizeof(aNumChars)];複製
這樣一個較多的
if else
或者
switch case
語句變為簡單的查表操作。
使用表驅動法,則可以將很多功能介面進行排列後按查表方式進行執行,當功能介面較多時能夠比switch語句更加簡潔。
由表驅動和回撥函式組成的通用功能介面
首先將對外的功能進行一個排列,構造一個功能介面表,並對功能介面編碼(dispatch.h):
typedef enum { ChipCheck = 0x41, DataTrans = 0x01, /*others*/ DataSave = 0x77,} FunctionCode_t;複製
根據功能函式的格式,宣告一個函式指標(dispatch.h):
typedef u32 (*pFunc)(u8 *cmd_in, u8 *cmd_out);複製
實現功能函式,注意功能函式的介面儘量保持一致,可以透過傳入一個通用的結構體或指標陣列方式,具體功能處理上的區別介面內部對資料進行細分處理。
標頭檔案(dispatch.h):
u32 func_ChipCheck(u8 *cmd_in, u8 *cmd_out);u32 func_DataTrans(u8 *cmd_in, u8 *cmd_out);u32 func_DataSave(u8 *cmd_in, u8 *cmd_out);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2936463/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 量化合約系統開發丨合約量化系統開發原始碼丨合約量化系統開發技術Demo原始碼
- 量化交易系統開發(說明流程)丨合約量化系統開發(技術分析及原始碼)原始碼
- 量化合約策略系統開發/合約量化系統開發技術方案講解(成熟原始碼)原始碼
- 量化合約系統開發(原始碼)合約量化系統開發(技術方案)原始碼
- what 量化合約交易系統開發原始碼丨 clear 合約量化系統開發技術(Demo 案例)原始碼
- Python量化合約系統開發技術,合約量化原始碼系統開發技術方案Python原始碼
- 量化合約系統開發(原始碼)合約量化系統開發(技術)原始碼
- 合約量化系統開發原始碼部署(功能版)量化合約系統開發技術流程詳細原始碼
- 量化合約系統開發技術案例(原始碼)丨合約量化系統開發解決方案(搭建)原始碼
- 合約量化系統開發(詳細方案)丨合約量化系統開發(Python原始碼)Python原始碼
- 合約量化開發(案例版)丨合約量化系統開發(技術說明)丨合約量化系統原始碼規則原始碼
- 量化合約系統開發(專案方案),合約量化系統開發(原始碼技術)原始碼
- 合約量化系統開發(成熟及策略)丨合約量化開發(原始碼專案)原始碼
- 量化交易系統開發技術闡述丨量化交易原始碼開發原始碼
- 量化合約原始碼開發技術/合約量化系統開發技術原始碼搭建程式原始碼
- 量化合約開發系統程式碼流程(Python)*合約量化系統開發定製技術流程Python
- “量化交易”系統開發技術詳細丨“量化交易”原始碼原始碼
- 量化合約系統開發方案(成熟Python)丨合約量化系統開發(OK、BSC)Python
- 合約量化交易開發丨量化交易AI機器人系統開發與技術程式碼示例AI機器人
- 量化合約丨合約量化開發原始碼版,合約量化丨量化合約系統開發(成熟案例)及詳細策略原始碼
- Yes量化合約交易系統技術開發/原始碼/量化合約開發技術原始碼
- 合約量化系統丨合約量化開發原始碼邏輯原始碼
- 量化合約機器人開發丨量化系統開發丨合約量化交易策略程式碼示例機器人
- 合約量化系統丨合約量化系統開發策略及詳情丨合約量化開發原始碼邏輯原始碼
- 量化合約開發程式丨量化合約系統開發(方案及邏輯)丨量化合約成品原始碼部署原始碼
- 量化合約系統開發(方案模式)|合約量化系統開發(原始碼搭建)模式原始碼
- 量化合約原始碼搭建開發案例丨合約量化技術開發成熟Demo原始碼
- 量化跟單/秒合約/原始碼系統開發/永續合約量化交易開發技術分析原始碼
- SET智慧合約量化(策略)系統開發技術(成熟技術程式碼)
- 量化交易系統開發需求丨量化交易原始碼模式原始碼模式
- 量化合約開發運營版丨量化合約系統開發技術方案及原始碼原始碼
- 量化交易機器人開發運營版丨量化機器人系統開發(成熟技術)丨量化機器人系統原始碼機器人原始碼
- 現貨合約量化交易系統開發部署原始碼案例原始碼
- 量化合約及合約量化機器人系統開發(開發策略)丨量化合約原始碼部署機器人原始碼
- 現貨量化/原始碼/秒合約/量化跟單交易系統合約開發python技術原始碼Python
- 量化合約開發(專案)丨量化合約系統開發(方案詳細)丨量化合約系統原始碼版原始碼
- 闡述量化合約系統開發技術方案丨合約量化系統開發邏輯分析
- 合約量化開發上線版,合約量化系統開發技術邏輯及詳細方案,合約量化原始碼原始碼