Currently I don't understand why the following code dosn't compile (with VC
8.0). I simply try to bind the post_event() method from the state_machine to
a function object. To illustrate the problem I've added the following code
to the Camera.hpp file of the Camera example from the Statechart library:
#include
#include
<snip>
struct Camera : sc::state_machine< Camera, NotShooting >
{
// @test start
typedef boost::function< void( const event_base_type& ) >process_event_fun; typedef boost::function< void( const event_base_type& ) > post_event_fun;
process_event_fun process_event_fun_;
post_event_fun post_event_fun_;
Camera()
{
process_event_fun_ = boost::bind( &Camera::process_event, boost::ref(
*this ), _1 );
// the following line doesn't compile with VC 8.0
// post_event_fun_ = boost::bind( &Camera::post_event, boost::ref(
*this ), _1 );
}
// @test end
bool IsMemoryAvailable() const { return true; }
bool IsBatteryLow() const { return false; }
};
After uncommenting the marked line the compiler produce more than 200 error
messages: A function template has too few arguments. But the line above
compiles very well and the process_event() method has the same signature.
The post_event() method is polymorphic. But this shouldn't be a problem.
Should it?