Załóżmy, że mam funkcję boost :: function z arbitralnym sygnaturą o nazwie typ: CallbackType
.Czy można użyć funkcji boost :: bind, aby skutecznie łączyć funkcje?
- Czy jest możliwe aby użyć
boost::bind
komponować funkcję, która pobiera te same argumenty jak CallbackType ale wywołuje dwa funktory z rzędu?
Jestem otwarty na wszelkie potencjalne rozwiązanie, ale tutaj jest ...
... Hipotetyczny przykład stosując pewne magic
szablonu:
Template<typename CallbackType>
class MyClass
{
public:
CallbackType doBoth;
MyClass(CallbackType callback)
{
doBoth = bind(magic<CallbackType>,
protect(bind(&MyClass::alert, this)),
protect(callback) );
}
void alert()
{
cout << "It has been called\n";
}
};
void doIt(int a, int b, int c)
{
cout << "Doing it!" << a << b << c << "\n";
}
int main()
{
typedef boost::function<void (int, int, int)> CallbackType;
MyClass<CallbackType> object(boost::bind(doIt));
object.doBoth();
return 0;
}
Czy 'magia' ma być zaimplementowana w znaczeniu" bind "? Jaka jest rola "binda"? Z pewnością nie wiążisz niczego do wywołania zwrotnego. – Potatoswatter
'magic' to może być szablon, który automatycznie utworzył funktor, który wziął dwa funktory jako argumenty + wszystkie argumenty' CallbackType' ... ale ma to jedynie zilustrować mój cel, niekoniecznie oferując realistyczne rozwiązanie. Jestem otwarty na drastycznie różne sugestie. – Catskul
Czy próbujesz skomponować 'void (void)' z 'void (int, int, int)'? A może to tylko literówka? – MSN