如何创建模板化嵌套模板参数包?

问题描述

我正在尝试基于模板化参数构建一个仅转换动作的状态机,它可以调用一个给定对象的成员函数

所以一个单独的状态是一个单一的类。它应该有它的 state-id,还应该被赋予所有可能的事件,以及它到具体状态的具体 Transition-function。

我尝试的是以下内容

    template<uint8_t state_id,template< class TObject,uint8_t Event,void (TObject::*Function)(void),uint8_t next_state_id> class... EventAction >
  class State {}

其中第二个模板参数包应根据其具体事件接受多个可能的转换。 (具体处理一个所谓的“EventAction”不是这里的主题) 到目前为止,编译器没有抱怨。

但现在我被困在如何正确调用这个模板上。我需要为参数包模板创建一个具体的类吗? 我想看看它如何使用它会是这样的:

class S_START : public State<S_START_ID,<Object,E_E_GOSEC,actionDoOne,S_SECOND_STATE_ID>,E_E_GOTHIRD,actionDoTwo,S_THIRD_STATE_ID>>

在这里搞砸了什么还是我的方法从一开始就错了?

我只能使用 C++11 和 C++14 的一些可能性,但不知何故不能使用全套(TI 的特殊编译器)。

解决方法

在这种情况下,很可能使用类模板的方法过于复杂(过度设计)。

试试类包:

template<uint8_t state_id,class... EventAction>  
class State {};

并将其用作


class S_START 
    : public State<S_START_ID,SomeTemplate<Object,E_E_GOSEC,actionDoOne,S_SECOND_STATE_ID>
               SomeTemplate<Object,E_E_GOTHIRD,actionDoTwo,S_THIRD_STATE_ID>>
{};