-1

J'essaie de créer une machine d'état qui est construite au moment de la compilation. J'ai déjà une version de travail en utilisant beaucoup de paramètres de modèle. Maintenant, je veux réduire la quantité de paramètres du template et en déplacer une partie vers les constructeurs constexpr.Créer un tableau de taille N au moment de la compilation en passant N dans un constructeur 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[]; 
}; 

Le code ci-dessus montre une version simplifiée de la machine d'état. Je veux spécifier la taille du tableau dans le constructeur constexpr. Je sais que je nuage modèles d'utilisation et de faire quelque chose comme ceci:

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

et divertissez tuple dans une liste d'initialiseur ou quelque chose, mais je ne veux pas tout autre paramètre de modèle à l'exception des EventT et StateT.

Est-ce possible d'une manière ou d'une autre?

+0

Vous pourriez être intéressé par [STTCL] (https://github.com/makulik/sttcl). –

+1

* Créer un tableau avec la taille N à la compilation * - 'std :: array '? – PaulMcKenzie

+0

@PaulMcKenzie Je ne peux pas utiliser 'std :: array' car N n'est pas un paramètre de template – Timo

Répondre

1

Non. Ce n'est pas possible. Vous aurez au moins besoin d'ajouter un paramètre de modèle de taille.