Я пытаюсь создать конечный автомат, который создается во время компиляции. У меня уже есть рабочая версия, используя множество параметров шаблона. Теперь я хочу уменьшить количество параметров шаблона и переместить часть его в конструкторы constexpr.Создайте массив с размером N во время компиляции, передав N в конструкторе 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 исключением.
Возможно ли это каким-то образом?
Возможно, вас заинтересует [STTCL] (https://github.com/makulik/sttcl). –
* Создайте массив с размером N во время компиляции * - 'std :: array'? –
PaulMcKenzie
@PaulMcKenzie Я не могу использовать 'std :: array', потому что N не является параметром шаблона – Timo