通过在constexpr构造函数中传递N,在编译时创建一个大小为N的数组

时间:2017-02-06 22:29:23

标签: c++ template-meta-programming constexpr state-machine

我试图创建一个在编译时构建的状态机。我已经通过使用大量模板参数获得了工作版本。现在我想减少模板参数的数量,并将其中的一部分移动到constexpr构造函数。

template<typename EventT, typename StateT>
class ConstStateMachine
{
public:
    constexpr ConstStateMachine(const std::initializer_list<StateDefinition<EventT, StateT>>& states) : 
        _states{ states }
    {        
    }

private:    
    const StateDefinition<EventT, StateT> _states[];
};

上面的代码显示了状态机的简化版本。我想在constexpr构造函数中指定数组的大小。我知道我使用模板制作这样的东西:

template<typename EventT, typename StateT, typename ...States>
class ConstStateMachine
{
    const std::tuple<States...> _states;
};

并在初始化列表或其他内容中展开元组,但我不想要除EventT和StateT之外的任何其他模板参数。

这有可能吗?

1 个答案:

答案 0 :(得分:1)

没有。这是不可能的。您至少需要添加一个大小模板参数。