Funktionsnamen als Templateparameter?



  • Wie kann man Funktionsnamen als Templateparameter angeben?


  • Mod

    Namen können keine Templateparameter sein, wohl aber Funktionszeiger auf Funktionen mit externer Verlinkung. z.B.

    template <typename Arg1, typename Arg2, typename Result, Result (*fun)(Arg1, Arg2)>
    struct binary_function2function_object
        : public std::binary_function<
              typename std::tr1::remove_cv< typename std::tr1::remove_reference< Arg1 >::type >::type,
              typename std::tr1::remove_cv< typename std::tr1::remove_reference< Arg2 >::type >::type,
              Result >
    {
        Result operator()(Arg1 arg1, Arg2 arg2) const { return fun( arg1, arg2 ); }
    };
    
    struct Foo { ... };
    void compare_foo(const Foo&, const Foo&);
    
    std::set< Foo, binary_function2function_object< const Foo&, const Foo&, bool, compare_foo > > my_set;
    


  • ... oder einfach "Funktoren" (= Objekte von Klassen, die den operator() definieren) - kann man auch ganz ohne "template-magic" machen.

    Gruß,

    Simon2.


Anmelden zum Antworten