我試圖將一個類函數的指針作爲變量發送給另一個類。我試圖將這兩個類分開,以便我可以重用代碼而不必在將來進行編輯。將指針指向類函數以指向函數
我編寫在Windows 7上,使用Visual Studio 2015年
DATASTRUCT dataItem = {0, 1, 0, 1, dataText, parentClass::doSomething};
childClass.addItem(dataItem); //childClass is initiated as a member of parentClass
在別處:
typedef struct dataStruct{
double min_x;
double max_x;
double min_y;
double max_y;
GLTEXT label; //custom struct for text information
void(*function)(void);
}DATASTRUCT;
我想childClass能夠去了解其業務,並檢查了某些參數,當childClass完成時,我希望它從parentClass調用doSomething,但實際上並不知道它是嵌套類。
編譯過程中我得到的錯誤是:
無效(父類:: )()不能用於初始化的無效()實體()。
我能夠定義一個標準函數並調用它,但這並不是每個parentClass都唯一的,然後我必須指定我所指的是哪個parentClass :: doSomething。
我發現最簡單的辦法是重新定義指針childClass運作爲void(父類:: *)(),這正是我想要的,但不是如何我想它。
有了這個說法,我不知道在哪裏拿這個,有沒有另一種方式?相似的東西?
編輯:
如果可能的話,我將如何明確送我childClass正確解讀動態函數指針所需要的信息。
所以......「父類::」提前
childClass.addItem(classInformation, dataItem, &parentClass::doSomething);
或者不接收端總是有知道的嗎?那麼現在是使用void指針的好時機嗎?
我是追着我自己的尾巴還是這是去某個地方?
編輯:
這樣的事情看起來很危險,但在這裏。
childClass.addItem(classInformation, dataItem, static_cast<void*>(&parentClass::doSomething));
childClass::callParent(classInformation, void*function){
static_cast<classInformation.something*>(function)();
}
什麼是「classInformation.something」在這種情況下?
成員功能需要一個對象,他們將操作。你如何指定你想要訪問哪一個? –
順便說一句,你真的應該使用'&parentClass :: doSomething'。只有MSVC會原諒你錯過'&',那只是因爲他們試圖與VC++ 6進行bug兼容。 – MSalters
@MSalters我會記住這一點,我曾經在c中添加&之前的函數指針,但是我開始在C++中出現類似指針的奇怪錯誤。到目前爲止,我注意到Visual Studio似乎更喜歡沒有。 – Jarred