geht das irgendwie einfacher
-
rabatz schrieb:
angenommen ich hab eine klasse die, nehmen wir ein anderes beispiel, eine liste von objekten verwaltet. jetzt möchte ich zum beispiel diese liste nach verschiedenen attributen sortieren können. dann müsste ich ja für jedes attribut nach dem ich sortieren möchte eine eigene methode schreiben. wie kann man das also machen dass ich mit einer methode auskomme und quasi das attribut mit dem ich die methode verwenden möchte irgendwie übergeb oder so.
Das sortieren machst du am besten "extern", mit einem Functor.
// pseudocode template <typename CompareFuncT> struct lied_comparator_p { typedef std::string const& (*accessor_t)() const; lied_comparator_p( accessor_t accessor, CompareFuncT cmp_func ) : accessor_(accessor) , cmp_func_(cmp_func) { } bool operator()( lied const& lhs, lied const& rhs ) const { return cmp_func_((lhs.*accessor_)(), (rhs.*accessor_)()); } }; template <typename CompareFuncT> lied_comparator_p<CompareFuncT> lied_comparator( typename lied_comparator_p<CompareFuncT>::accessor_t accessor, CompareFuncT cmp_func ) { return lied_comparator_p<CompareFuncT>(accessor, cmp_func); } int test() { std::sort(songs.begin(), songs.end(), lied_comparator(&lied::get_title, std::less<string>()); std::sort(songs.begin(), songs.end(), lied_comparator(&lied::get_interpret, std::greater<string>()); }