我对 C++ 中函数指针的概念相当陌生,所以我不知道如何正确编写我的问题。请多多包涵。
基本上,我要做的是创建一个 Button 对象,其构造函数接受一个函数指针作为其参数。该函数指针指向将更改 StateMachine 状态的函数。
这是示例代码(它不起作用,并且不相关的位已被剥离)
按钮.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 的方法,它是在 Program 类中声明的枚举,因为函数指针不需要参数。我尝试过调整它,但没有成功。
关于我应该如何做的任何建议?