Supongamos que tengo una función boost :: con una firma arbitraria llamada tipo CallbackType
.¿Es posible usar boost :: bind para efectivamente concatenar funciones?
- ¿Es posible utilizar
boost::bind
para componer una función que toma los mismos argumentos que la CallbackType pero llama a los dos funtores en la serie?
Estoy abierto a cualquier solución potencial, pero aquí hay un ...
... Ejemplo hipotético uso de algunos magic
plantilla:
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;
}
¿Se supone que 'magic' debe implementarse en términos de' bind'? ¿Cuál es el papel de 'bind' que se supone que es? Ciertamente, no estás vinculando nada a la devolución de llamada. – Potatoswatter
'magic' sería quizás una plantilla que creara automáticamente un functor que tomara dos funtores como argumentos + todos los argumentos de' CallbackType' ... pero esto solo pretende ilustrar mi objetivo, no necesariamente ofrecer una solución realista. Estoy abierto a sugerencias drásticamente diferentes. – Catskul
¿Estás tratando de componer un 'void (void)' con 'void (int, int, int)'? ¿O fue solo un error tipográfico? – MSN