我對C++中的函數指針的概念相當陌生,所以我不知道如何正確編寫我的問題。請多多包涵。將StateMachine的狀態作爲參數傳遞給函數指針C++ OOP
基本上,我想要做的是創建一個Button對象,其構造函數接受函數指針作爲其參數。該函數指針指向一個將改變StateMachine狀態的函數。
下面是示例代碼(它不工作,和不相干位已經被剝離出來)
Button.h
#include "StateMachine.h"
class Button
{
private:
void (*m_onclickAction)(); //a data member
public:
Button(void (*action)());
};
StateMachine.h(我沒有寫,我只是允許才能使用。所以應該會有用的代碼沒有問題,我不想對其進行修改)
#include <map>
template<class E, class T>
class StateMachine
{
public:
typedef void (T::*CallbackOnInitialise)();
typedef void (T::*CallbackOnExit)();
private:
T* m_pOwner;
E m_currentState;
// Maps to store function pointers to state functions.
std::map<E, CallbackOnInitialise> m_statesOnInitialise;
std::map<E, CallbackOnExit> m_statesOnExit;
public:
StateMachine(T* pOwner, E emptyState)
{
m_currentState = emptyState;
m_pOwner = pOwner;
}
void ChangeState(E statenext)
{
//do something to change the state
}
};
所以,在我的主程序類,我能夠做這樣的事
#include "Button.h"
#include "StateMachine.h"
//Code to instantiate an StateMachine object goes here
Button* aButton = new Button(aStateMachine->ChangeState(NEW_STATE));
問題是我不能想辦法正確地傳遞NEW_STATE,這是因爲函數指針期待不帶參數的程序類中聲明枚舉。我嘗試過調整它,但沒有成功。
任何有關我應該怎麼做的建議?