Angenommen, ich habe eine boost :: -Funktion von mit einer beliebigen Signatur namens CallbackType
.Ist es möglich, boost :: bind zu verwenden, um Funktionen effektiv zu verketten?
- Ist es möglich,
boost::bind
zu verwenden, um eine Funktion zu schreiben, die die gleichen Argumente wie die CallbackType nimmt, fordert jedoch die beiden functors nacheinander?
Ich bin offen für jede mögliche Lösung, aber hier ist ein ...
... Hypothetisches Beispiel mit einigen magic
Vorlage:
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;
}
Soll 'magic' im Sinne von' bind' implementiert werden? Welche Rolle soll 'bind' spielen? Sicherlich binden Sie nichts an den Rückruf. – Potatoswatter
"magic" wäre vielleicht eine Vorlage, die automatisch einen Funktor erstellt, der zwei Funktoren als Argumente akzeptiert + alle Argumente von 'CallbackType' ... aber das soll nur mein Ziel verdeutlichen, nicht unbedingt eine realistische Lösung bieten. Ich bin offen für drastisch andere Vorschläge. – Catskul
Versuchen Sie ein 'void (void)' mit 'void (int, int, int)' zu erstellen? Oder war das nur ein Tippfehler? – MSN