我模仿使用混合c/C++的面向對象的做法。這是一個作業分配和我會不是喜歡的答案,但也許是一個位置找到它。在c/C++中用函數指針模仿OO,如何存儲它們?
我們被分配給創建:
1)的一般結構
2)這個結構能夠保持任何類型的數據成員的
3)這個結構能夠保持任何功能
正如我的老師解釋的那樣,我們將把數據成員,他們的名字,函數和他們的名字保存到四個獨立的向量中。我已經有類似的東西
struct GenericClass
{
vector < void*(*)(GenericClass& gc, void* p) > funcs; //A void pointer whose parameters are a void pointer
vector <string> funcsNames; //Name of the function (void pointer)
vector < void* > data;
vector <string> dataNames;
我們需要能夠添加函數到「funcs」中。我們應該能夠添加的函數必須:1)返回一個(void *)和2)將(void *)作爲參數放入函數中。我寫了一個函數來做到這一點,但它是不完整的
void addFunction(GenericClass& gc, void* (*fn)(GenericClass& gc, void* v), string name)
{
gc.funcs.push_back(*fn); //??
gc.funcsNames.push_back(name);
return;
}
我知道我必須添加到「gc.funcs」一個函數指針是誰能夠有一個(void *)列可選參數(顯然我不希望這個函數內?),它返回一個(void *),但因爲這是我在函數指針池中的第一個wade,任何人都可以指向我可能需要查看的方向嗎?謝謝
我只是好奇你的老師爲什麼認爲這是一個理智的/重要的事情學習...... – olevegard
@olevegard請,這只是一個主題。我目前正在嵌入lua,這是非常相似的情況。這是一個用例。 –
_'Ioating OO'_ ??這應該是什麼意思,提供[tag:C++] vtable替代項,放置在'struct'聲明中的plain [tag:c]函數指針?您可以在[tag:c]中很好地執行**面向對象的編程,沒有關於它的模擬_ !! –