Ich habe gerade selbst eine Klasse erstellenerfinde ich das Rad mit dieser trivialen Methode Call Forwarding Klasse neu?
template <typename T> struct invoker {
void operator()(T& it) const {it();}
};
so konnte ich ein invoker<foo>
etwas passieren (was nicht unter meiner Kontrolle ist), die invoker<foo>::operator()(foo&)
darauf mit verschiedenen foo
Instanzen immer wieder anrufen will, es zu erhalten, Weiterleiten Sie diese Anrufe an die foo::operator()()
Methode.
Ich weiß, es sind nur ein paar Zeilen, aber das scheint so etwas zu sein, was wahrscheinlich schon von STLs funktionalem oder boost::bind
irgendwie vorgesehen ist. Außer ich kann den Trick nicht sehen, wenn es einen gibt. (Ich bin sicher, ich bin nicht die erste Person, etwas zu verwenden, sehr wie diese, es einen Namen hat?)
ich denke C++ 11 hat auch etwas dafür – pyCthon
Für jetzt bin ich auf g ++ 4.4.5; Ich glaube nicht, dass g ++ bis 4.5 lambdas hat. Neugierig, eine Lambda-Lösung zu sehen, wenn man sie trotzdem veröffentlicht; Ich kann mit meiner Invoker-Klasse bis zu einem g ++ Versions-Upgrade leben. – timday
Warum würden Sie 'foo :: operator()' nicht direkt aufrufen? Ich meine, die Klasse, die 'invoker :: operator()' aufruft, muss etwas wie 'some_invoker (some_foo);' tun, während man es einfach so nennen könnte: 'some_foo();'. Sie fügen eine unnötige indirekte Ebene hinzu. – mfontanini