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.


  • Administrator

    Kam vor kurzem erst wegen std::tr1::function :
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-255945.html

    Grü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 mit boost::bind kontruiertes. Insbesondere bei boost::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?


Log in to reply