Вопрос в следующем. Скажем есть клиентская функция:
void DoSomething(boost::function<void(int&)> fn);
и есть функция член, которую надо использовать как аргумент к этой клиентской функции..
ее сигнатура:
void IInterface::Func(int*);
хватит ли boost::bind чтобы оформить функтор для клиенской функции, который вызывает Func?
Здравствуйте, SWayf, Вы писали:
SW>Вопрос в следующем. Скажем есть клиентская функция:
SW>SW>void DoSomething(boost::function<void(int&)> fn);
SW>
SW>и есть функция член, которую надо использовать как аргумент к этой клиентской функции..
SW>ее сигнатура:
SW>SW>void IInterface::Func(int*);
SW>
SW>хватит ли boost::bind чтобы оформить функтор для клиенской функции, который вызывает Func?
А почему нельзя описать одинаковую сигнатуру (либо указатель, либо ссылка)? В таком случае все получилось бы.
Здравствуйте, brav, Вы писали:
B>А почему нельзя описать одинаковую сигнатуру (либо указатель, либо ссылка)? В таком случае все получилось бы.
И та и другая сигнатура находятся в местах не подлежащих изменениям.. библиотеки

Проблема легко решается написанием своего функтора. Но такую адаптацию надо будет проводить для многих функций,
с различными сигнатурами, и часто только выщеописанное отличие не дает мне использовать boost::bind. Или мое незнание
boost::bind'а

Вот это незнание хотелось бы как-нить елиминировать...
Здравствуйте, SWayf, Вы писали:
SW>Вопрос в следующем. Скажем есть клиентская функция:
SW>SW>void DoSomething(boost::function<void(int&)> fn);
SW>
SW>и есть функция член, которую надо использовать как аргумент к этой клиентской функции..
SW>ее сигнатура:
SW>SW>void IInterface::Func(int*);
SW>
SW>хватит ли boost::bind чтобы оформить функтор для клиенской функции, который вызывает Func?
Хватит.
void f( boost::function<void(int &)> fn )
{
int a = 4;
fn(a);
}
int * ref2ptr( int & i )
{
return &i;
}
struct S
{
void f1( int & i )
{
std::cout << "S::f1( " << i << " )\n";
}
void f2( int * i )
{
std::cout << "S::f2( " << *i << " )\n";
}
};
void f1( int & i )
{
std::cout << "f1( " << i << " )\n";
}
void f2( int * i )
{
std::cout << "f2( " << *i << " )\n";
}
int main ()
{
f( f1 );
f( boost::bind(&f2, boost::bind(&ref2ptr, _1) ) );
S s;
f( boost::bind(&S::f1, s, _1 ) );
f( boost::bind(&S::f2, s, boost::bind(&ref2ptr, _1) ) );
}
Здравствуйте, Smal, Вы писали:
S>...
S>[skipped]
S>...
Точно, спасибо

До этой идею только вчера вечером допер, но отписаться тут не успел