-1

Я пытаюсь создать конечный автомат, который создается во время компиляции. У меня уже есть рабочая версия, используя множество параметров шаблона. Теперь я хочу уменьшить количество параметров шаблона и переместить часть его в конструкторы 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 исключением.

Возможно ли это каким-то образом?

+0

Возможно, вас заинтересует [STTCL] (https://github.com/makulik/sttcl). –

+1

* Создайте массив с размером N во время компиляции * - 'std :: array '? – PaulMcKenzie

+0

@PaulMcKenzie Я не могу использовать 'std :: array', потому что N не является параметром шаблона – Timo

ответ

1

Нет. Это невозможно. Вам, по крайней мере, нужно будет добавить параметр шаблона размера.

 Смежные вопросы

  • Нет связанных вопросов^_^