-1

コンパイル時にビルドされた状態マシンを作成しようとしています。私はすでにたくさんのテンプレートパラメータを使って作業バージョンを手に入れました。今私は、テンプレートパラメータの量を減らし、その一部をconstexprコンストラクタに移動したいと考えています。constexprコンストラクタにNを渡してコンパイル時にサイズNの配列を作成します。

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 Nはテンプレートのパラメータではないので、 'std :: array'を使うことはできません – Timo

答えて

1

いいえ、不可能です。少なくとも、サイズテンプレートパラメータを追加する必要があります。

関連する問題