Funktionsnamen als Templateparameter?
-
Wie kann man Funktionsnamen als Templateparameter angeben?
-
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.