一種根據輸入動態執行函式

2021-07-11 18:46:49 字數 1013 閱讀 2447

typedef

int (*brewfunction)();//函式指標型別變數

typedef

std::map

brewmap;

brewmap g_brew_map;//全域性變數

#define registerbrewfunction(func) \

namespace \

}; \

__registerer_##func g_registerer_##func; \

}

匿名命名空間,使得檔案外無法訪問這些變數,定義乙個類,以陣列方式往map中新增乙個函式指標。『#』表示將乙個變數變成字串。『##』表示拼接乙個字串和乙個變數。

//返回函式指標

static brewfunction getbrewfunction(const

string& name) else

std:cerr

<< "unknown action: "

<< name;

return null; // not reachable, just to suppress old compiler warnings.

}}int name1()

registerbrewfunction(name1);

int name2()

registerbrewfunction(name2);

使用的方法:

int main(int argc, char** argv)
示例:

./main name1

./main name2

程式的整個思路是:

開始程式,執行巨集展開,巨集展開的過程會定義兩個類別和兩個全域性物件,其名稱含有name1和name2欄位。類定義物件的時候會呼叫類的建構函式,在建構函式裡將函式指標加入map中。

根據終端輸入的函式名字,由名字查詢map得到函式指標,然後呼叫函式。

opencv 一種聚焦評價函式

聚焦評價函式,對於自動聚焦的實現,具有重要的意義。聚焦評價函式有很多,每種方法都有其優點和缺點,本文所記錄的,只是其中一種方法,個人覺得是簡單實用的。原理很簡單,越是清晰的 每個畫素與其周圍畫素的差距越大,當聚焦不對時,會發現,整個影象糊成一團,即畫素值都在某一小範圍內。int calculateg...

動態css的一種思路 非原創

在web系統開發過程中,採用css 增強和美化頁面樣式已經成了一道標準 工序 在visual studio net 環境下開發bs系統,可以通過設定web 控制項的cssclass屬性,方便地設定和修改控制項的樣式。但在實際開發過程中,讓開發人員乙個個地設定控制項的cssclass屬性,不僅繁瑣,而...

NGUI的UISprite動態染色的一種方法

本文主要參考iwinterice 的 ngui的uisprite動態染色的一種解決方案 文章。參考參考,就是既參詳又拷貝,相關理論依據,還請去移步 ngui的uisprite動態染色的一種解決方案 裡面去尋找。我這裡只有提供一下原始碼,並對原博文進行了一點點修改,至於修改後的好壞,俺也不知道咯。首先...