boost::function miteinander vergleichen... Was gibt's für Alternativen?
-
Ja also... wie man ja weiß, kann man zwei boost::functions nicht per boolschem Operator vergleichen. Was gäb es denn sonst noch für sichere Möglichkeiten oder Alternativen, mit denen man sowas anstellen kann? Mir persönlich fällt das nix Annehmbares ein.
-
Kam vor kurzem erst wegen
std::tr1::function
:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-255945.htmlGrüssli
-
Hey, danke für deine Antwort!
Es scheint demnach keine vernünftige Möglichkeit zu geben, oder? Den Iterator-Ansatz, der dort am Ende rausram, finde ich persönlich unpraktisch.
-
Es geht leider wirklich nur über irgendeine Form von ID. In einem
boost::function
-Objekt kann ja alles mögliche mit der passenden Signatur stehen. Einfache Funktoren, freie Funktionen oder irgendetwas mitboost::bind
kontruiertes. Insbesondere beiboost::bind
kann das Funktionsobjekt selbst aus einer vielzahl von Funktionsobjekten zusammengesetzt sein, und eine einheitliche Mimik zum Vergleichen ist nur mit unverhältnismäßig großen Aufwand möglich...
-
Direktes Vergleichen von
std::tr1::function
ist nicht möglich (oder nur für wenige Spezialfälle).Ich brauchte die Vergleichsmöglichkeiten damals, um aus einem Event-System registrierte Funktionen zu löschen. Daher schien mir der "Iterator-Ansatz" (der Iterator ist eigentlich nur ein Implementierungsdetail, im Vordergrund steht die Speicherung von referenzierten Funktionen) die einzige brauchbare Möglichkeit zu sein. Boost.Signals verwendet einen ähnlichen Mechanismus.
Wozu musst du denn Funktionen vergleichen?