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

Create an array with size N at compile time by passing N in a constexpr constructor

我正在尝试制作一个在编译时构建的状态机。我已经通过使用大量模板参数获得了一个工作版本。现在我想减少模板参数的数量并将其部分移动到 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 之外,我不需要任何其他模板参数。

这在某种程度上可能吗?

没有。这是不可能的。您至少需要添加尺寸模板参数。