将模板类成员函数指针分配给数组

时间:2018-02-01 15:27:35

标签: c++

我试图将一些成员函数分配给成员函数指针数组。该数组继承自模板基类。此模板基类还用于指定数组的类型。我无法理解为什么在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();
};

init()完成后数组变量的屏幕截图 Screenshot of the array variable after init() finishes

内存中数组的屏幕截图

Screenshot of the array in memory

0 个答案:

没有答案