2012-12-19 73 views
2

不知道標題突出了我的目標。編譯時間動態函數調用

我可以動態調用在編譯時的方法? 例如:

int CallMethod(string methodName, string methodArg) 
{ 
    Foo foo; 
    return foo.#methodName(methodArg); 
} 

CallMethod("getValue", "test"); // This would attempt to call on a Foo instance, method getValue with argument "test" -- foo.getValue("test"); 

謝謝!

+0

沒有,使用的模板或宏。 – Pubby

+1

是您的函數名稱將是編譯時間字符串字面就像你在你的例子發佈或正在打算從文件/讀取用戶輸入等? –

+0

@Karthik T:字符串字面 – codeJack

回答

4

您可以創建一個宏

CallMethod(foo,"test"); 
4

這是Reflectionnot available natively in C++

如果您有methodName你可以建立它調用基於methodName相應功能的查找表可能值的數量有限,但你不能調用任意函數與此係統。

。這可能是一個std ::地圖爲@PaperBirdMaster暗示或巨一套if-else檢查。但這不是真實的反射,只是一個粗糙的錯覺。在主要功能

#define CallMethod(methodName, var) { Foo foo; foo.##methodName(var); } 

+0

我可以考慮實現OP請求的唯一方法是創建一個帶有字符串和成員函數指針的映射......但它根本不是反射 –

+0

是否有可能實現我正在嘗試使用的方法助推器擴展的幫助?如果可能的話,你可以給我一個反思的例子嗎?謝謝! – codeJack

+0

它不在編譯時反映出來。 –