通过在 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 之外,我不需要任何其他模板参数。
这在某种程度上可能吗?
没有。这是不可能的。您至少需要添加尺寸模板参数。
我正在尝试制作一个在编译时构建的状态机。我已经通过使用大量模板参数获得了一个工作版本。现在我想减少模板参数的数量并将其部分移动到 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 之外,我不需要任何其他模板参数。
这在某种程度上可能吗?
没有。这是不可能的。您至少需要添加尺寸模板参数。