是否有可能創造/生成類似指針聲明:在C++運行時生成函數指針聲明?
void (*foo)(int, float);
bool (*foo)();
char (*foo)(char, int);
但不知道的參數的類型或返回類型,直到運行時。
函數聲明將從字符串中讀取,該字符串將指定存儲在C++容器中的返回值和參數類型(如果有的話)(如果可能)。
它可以在運行時(不是編譯時)完成嗎?如果需要的話,也可以使用C++ 11。
我真的懷疑這可以用像C++這樣的靜態類型語言來完成,但是如果可以完成,那麼有人會用什麼方法。不需要代碼(但非常感謝),只需指導一下必須使用的內容。
編輯:
測試幾個想法之後事實證明,它不能被(直接)與C++實現的。幸運的是,我找到了dyncall庫,它允許我(間接)在相當多的平臺上做到這一點。
實施例功能:
double sqrt(double x);
使用dyncall調用的函數:
double r;
DCCallVM* vm = dcNewCallVM(4096);
dcMode(vm, DC_CALL_C_DEFAULT);
dcReset(vm);
dcArgDouble(vm, 4.2373);
r = dcCallDouble(vm, (DCpointer)&sqrt);
dcFree(vm);
字符串也可用於聲明函數的結構。
C function prototype dyncall signature
void f1(); ")v"
int f2(int, int); "ii)i"
long long f3(void*); "p)L"
void f3(int**); "p)v"
double f4(int, bool, char, double, const char*); "iBcdZ)d"
據我所知,這是做不到的。 –
所以你有一個字符串。你以某種方式將* something *存儲在從該字符串派生的容器中(它不能是一個聲明 - 這是一個編譯時的概念;你將存儲一些對象)。怎麼辦?這個練習的最終目標是什麼? –
你爲什麼需要這樣做?是否有可能重新設計你的代碼,所以你不需要這樣做? – cup