我有兩個結構,struct B從struct A繼承。我想將一個函數作爲參數從struct B傳遞給struct A以供struct A使用。C++將struct函數作爲繼承結構中的函數的參數
這是我想達到的一個例子,我遇到的問題是,完整的代碼是TL; DR。
struct A
{
int32 mynum;
void Tick(float delta, bool doThis, void (funcparam)(float, bool, int32))
{
funcparam(delta, doThis, mynum);
}
};
struct B : public A
{
void RunThis(float deltaTime, bool doIt, int32 which)
{
// do something when called by Struct A
};
void DoSomething()
{
Tick(0.1f, true, &B::RunThis);
};
};
的問題是這一行:Tick(0.1f, true, &B::RunThis);
從功能void DoSomething()
除非我做錯了從一開始,但我想我傳遞錯誤的,因爲它仍然是在頭部內我目前定義的結構是什麼?
錯誤(我已經修改,以適應我的例子錯誤,我不認爲我搞砸了..):
error C2664: 'void A::Tick(float,bool,void (__cdecl *)(float,bool))': cannot convert argument 3 from 'void (__cdecl B::*)(float,bool)' to 'void (__cdecl *)(float,bool)'
當然從&B::RunThis
省略B::
不能解決任何問題。
查看'std :: function()',你的函數指針void(funcparam)(float,bool,int32)'不能帶成員函數指針。 –
''void(funcparam)(float,bool,int32)''不是你想要的。首先,一個(非成員)函數指針的簽名是''void(* funcparam)(float,bool,int32)''(你錯過了*)。其次,你可以使Tick()成爲基類的一個函數,然後調用一個虛函數,它可以在派生類中重寫。與使用'std:function''相比,這仍然是一個更好的方法,只要您具有「派生類」的1:1關係:「您想要執行的函數」。 – BitTickler
@BitTickler - 對我的目的來說,這是一個更好的解決方案,謝謝!至於具體問題的答案,我仍然會等待它發佈,以便那些谷歌類似問題的人有一個準確的答案 – Vii