В С++ 11 вы можете использовать простую лямбда-функцию, обертывающую вызов вашего метода-члена.
Class c;
auto f = [&c]( const state_type & x , state_type &dxdt , double t ) {
c.system_func( x , dxdt , t ); };
integrate( f , x0 , t0 , t1 , dt );
std::bind
также может работать, но тогда вам нужно позаботиться о том, чтобы значения передаются по ссылке или по значению.
В С++ 03 вам нужно написать простую оболочку вокруг вашего метода класса.
struct wrapper
{
Class &c;
wrapper( Class &c_ ) : c( c_ ) { }
template< typename State , typename Time >
void operator()( State const &x , State &dxdt , Time t ) const
{
c.system_func( x , dxdt , t );
}
};
// ...
integrate( wrapper( c ) , x0 , t0 , t1 , dt );
(Boost.Bind не будет корректно работать с более чем двумя аргументами).
person
headmyshoulder
schedule
12.09.2013