別の特定のオブジェクトのメンバー関数を呼び出すことができる、テンプレート化されたパラメーターに基づいて、遷移アクションのみのステート マシンを構築しようとしています。
したがって、個別の州は単一のクラスです。これには状態 ID が必要であり、具体的な状態への具体的な遷移関数を使用して、すべての可能なイベントが与えられる必要があります。
私が試したのは次のとおりです。
template<uint8_t state_id, template< class TObject, uint8_t Event, void (TObject::*Function)(void), uint8_t next_state_id> class... EventAction >
class State {}
2 番目のテンプレート パラメーター パックは、具体的なイベントに応じて複数の可能な遷移を受け入れる必要があります。(いわゆる「EventAction」の具体的な処理は、ここでは取り上げません) これまでのところ、コンパイラは文句を言いません。
しかし今、私はこのテンプレートを正しく呼び出す方法に行き詰まっています。パラメータ パック テンプレートの具体的なクラスを作成する必要がありますか? 私がそれをどのように使用するかを調べたいのは、次のようなものです。
class S_START : public State<S_START_ID, <Object, E_E_GOSEC, actionDoOne, S_SECOND_STATE_ID>
, <Object, E_E_GOTHIRD, actionDoTwo, S_THIRD_STATE_ID>>
ここで何かを台無しにしていますか、それとも最初から私のアプローチが間違っていますか?
私は C++11 と C++14 のいくつかの可能性しか使用できませんが、どういうわけか完全なセット (TI による特別なコンパイラ) は使用できません。