Selon l'exemple dans le documentation j'ai fait le code suivant qui ne parvient pas à compiler parce que custom_reaction <> ne semble pas correspondre au concept attendu en tant que troisième paramètre de modèle pour indiquer < >. Comment puis-je vraiment faire des points de choix? (J'ai également demandé cela sur la liste de boost)Boost.Statechart - problème avec la méthode documentée pour les points de choix
#include <boost/statechart/state_machine.hpp>
#include <boost/statechart/simple_state.hpp>
#include <boost/statechart/state.hpp>
#include <boost/statechart/custom_reaction.hpp>
#include <boost/statechart/event.hpp>
#include <boost/statechart/transition.hpp>
#include <boost/mpl/list.hpp>
#include <iostream>
namespace sc = boost::statechart;
struct make_choice : sc::event<make_choice> {};
// universal choice point base class template
template< class MostDerived, class Context >
struct choice_point : sc::state< MostDerived, Context,
sc::custom_reaction<make_choice> >
{
typedef sc::state< MostDerived, Context,
sc::custom_reaction<make_choice> > base_type;
typedef typename base_type::my_context my_context;
typedef choice_point my_base;
choice_point(my_context ctx) : base_type(ctx)
{
this->post_event(boost::intrusive_ptr<make_choice>(
new make_choice()));
}
};
// ...
struct MyChoicePoint;
struct Machine : sc::state_machine< Machine, MyChoicePoint > {};
struct Dest1 : sc::simple_state< Dest1, Machine > {};
struct Dest2 : sc::simple_state< Dest2, Machine >
{
Dest2() { std::cout << "Dest2\n"; }
};
struct Dest3 : sc::simple_state< Dest3, Machine > {};
struct MyChoicePoint : choice_point< MyChoicePoint, Machine >
{
MyChoicePoint(my_context ctx) : my_base(ctx) {}
sc::result react(const make_choice &)
{
if (0)
{
return transit<Dest1>();
}
else if (1)
{
return transit<Dest2>();
}
else
{
return transit<Dest3>();
}
}
};
int main()
{
Machine machine;
machine.initiate();
std::cin.get();
}
ok, bien pas de réponse dans boost.user et personne d'autre n'a de réponse. Cela semble fonctionner jusqu'à présent, alors j'accepte ma propre réponse. –