1

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

所以一个单独的状态是一个单一的类。它应该有它的 state-id 并且还应该被赋予所有可能的事件以及它到具体状态的具体转换函数。

我尝试的是以下内容:

    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>
                                       , <Object, E_E_GOTHIRD, actionDoTwo, S_THIRD_STATE_ID>>

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

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

4

1 回答 1

1

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

试试类包:

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>>
{};
于 2020-12-23T15:34:45.137 回答