我试图将一些成员函数分配给成员函数指针数组。该数组继承自模板基类。此模板基类还用于指定数组的类型。我无法理解为什么在init()运行后,只有数组的元素0保存它所分配的函数指针。数组的元素1显示全零。当我在内存中查看数组时,它确实按顺序显示了两个元素,但内存中的大小看起来太大(16字节),我的猜测是元素1在第一个函数指针之后看到所有那些零字节自己的价值。为什么会发生这种情况,应该做些什么?这段代码不是我的实际项目,但我尝试用同样的问题做一个最小的例子。
的main.cpp
#include "Statemachine.h"
int main()
{
RunnableB myRunnable;
myRunnable.init();
return 0;
}
Statemachine.cpp
#include "Statemachine.h"
void RunnableB::workFuncOne()
{
int j = 7;
int jPlus1 = j++;
};
void RunnableB::workFuncTwo()
{
int a = 8;
int aPlus1 = a++;
};
void RunnableB::init()
{
m_workFuncTable[0] = &RunnableB::workFuncOne;
m_workFuncTable[1] = &RunnableB::workFuncOne;
}
StateMachine.h
#pragma once
#include <array>
enum RunnableBEnum
{
STATE_ONE,
STATE_TWO,
STATE_COUNT
};
template <class RunnableType, class EnumType>
class CTtaStateMachine
{
public:
CTtaStateMachine()
{
//m_entryFuncTable.fill(0);
m_currentState = RunnableBEnum::STATE_ONE;
}
protected:
EnumType m_currentState;
EnumType m_targetState;
typedef void(RunnableType::*runnableMemberFunc)();
std::array<runnableMemberFunc, EnumType::STATE_COUNT> m_workFuncTable;
void executeStateMachine()
{
if (0 != m_entryFuncTable[m_currentState])
{
(static_cast<RunnableType*>(this)->*m_workFuncTable[m_currentState])();
}
}
};
class RunnableB : public CTtaStateMachine<RunnableB, RunnableBEnum>
{
public:
void init();
private:
void workFuncOne();
void workFuncTwo();
};
内存中数组的屏幕截图