Привет
Допустим есть некий класс с набором методов, имеющих одинаковый тип возвращаемого значения но разные типы и количество аргументов.
Хочется добавить к этому классу нему метод который бы мог выполнить любой из остальных методов и вернуть его результат.
Вот что у меня получилось:
struct Test
{
bool foo1(bool p)
{ return true; }
bool foo2(int p1, int p2)
{ return true; }
bool foo3(double p1, double p2, double p3)
{ return true; }
typedef boost::function< bool ( Test * const ) > Action;
bool perform( Action a )
{
return a(this);
}
};
int main( int argc, char* argv[] )
{
Test t;
t.perform( boost::bind( &Test::foo1, _1, false ) );
t.perform( boost::bind( &Test::foo2, _1, 1, 2 ) );
t.perform( boost::bind( &Test::foo3, _1, 3, 4, 5 ) );
}
Вопрос заключается в том — как написать, чтобы не приходилось указывать placeholder для this при вызове метода perform?
Хочу чтобы вызовы писались проще, а this прицеплялся уже внутри метода perform:
Test t;
t.perform( boost::bind( &Test::foo1, false ) );
t.perform( boost::bind( &Test::foo2, 1, 2 ) );
t.perform( boost::bind( &Test::foo3, 3, 4, 5 ) );
Но при попытке написать хотя бы
boost::bind( &Test::foo1, false );
компилятор (VS2005) падает