Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionspointer und Templates

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
26.10.2003, 19:35 Uhr
(un)wissender
Niveauwart


Ich habe Probleme zu verstehen was ich hier tue und warum es falsch ist.


C++:
template<typename valuetype>
    class Functor {
        private:
            typedef bool (*cmp)(const valuetype &, const valuetype & );
            cmp func;   //Kann man das so machen?
        
        public:
            Functor(bool (*cmp)(const valuetype &, const valuetype & ))
            : func(cmp) {}
            
            bool operator()(const valuetype &elem_one, const valuetype &elem_two) const
            {
                return func(elem_one, elem_two);
            }
    };
    
    //Geht sowas überhaupt?
    template<typename iter, typename std::iterator_traits<iter>::value_type>
    void sort(iter start, iter end, bool (*cmp)(const value_type &, const value_type & ))
    {
        Functor tor(cmp)//Wie übergebe ich den Funktionspointer richtig?
    }        



Zeil des Ganzen ist es, einen Pointer auf eine Funktion in einem Funktionenobjekt zu kapseln.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 26.10.2003 um 19:36 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.10.2003, 20:32 Uhr
0xdeadbeef
Gott
(Operator)


Warum verwendest du nicht einfach std::pointer_to_binary_function?

C++:
#include <functional>

//...

std::pointer_to_binary_function<char*, char*, int> strcmp_functor(strcmp);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.10.2003, 22:29 Uhr
(un)wissender
Niveauwart


Ach, ich habe schon auf sowas gewartet
Ich möchte es schlicht und einfach einmal selber schreiben, als Übung, danach verwende ich dann den Standard.

Also, kann mir jemand sagen, was ich falsch mache?
Der g++ sagt immer nur parse error, das kommt nicht wirklich gut...
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.10.2003, 22:52 Uhr
0xdeadbeef
Gott
(Operator)


Beim gcc liegt das dabei:

C++:
/// One of the @link s20_3_7_adaptors adaptors for function pointers@endlink.
template <class _Arg1, class _Arg2, class _Result>
class pointer_to_binary_function :
  public binary_function<_Arg1,_Arg2,_Result> {
protected:
    _Result (*_M_ptr)(_Arg1, _Arg2);
public:
    pointer_to_binary_function() {}
    explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
      : _M_ptr(__x) {}
    _Result operator()(_Arg1 __x, _Arg2 __y) const {
      return _M_ptr(__x, __y);
    }
};


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.10.2003, 23:03 Uhr
(un)wissender
Niveauwart


Danke, das hat ein bißchen geholfen!
Das compiliert und scheint auch das zu tun was es soll:


C++:
template<typename valuetype>
    class Functor {
        private:
            typedef bool (*cmp)(const valuetype &, const valuetype & );
            cmp func;    
        
        public:
            Functor(bool (*cmp)(const valuetype &, const valuetype & ))
            : func(cmp) {}
            
            bool operator()(const valuetype &elem_one, const valuetype &elem_two) const
            {
                return func(elem_one, elem_two);
            }
    };
    
    template<typename iter>
    void sort(iter start, iter end,
              bool (*cmp)(const typename std::iterator_traits<iter>::value_type &,
                          const typename std::iterator_traits<iter>::value_type & ))
    {
        Functor<typename std::iterator_traits<iter>::value_type> functor(cmp);
    }      


--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 26.10.2003 um 23:03 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: