Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wie Funktionen-objekt annehmen?

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
07.10.2003, 23:13 Uhr
~(un)wissender
Gast


Folgendes funktioniert mit der STL:

C++:
#include <functional>
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;

struct intvgl //:
                 //public binary_function<int,int,bool>
{
    bool operator()(int one, int two) const
    {
        if(one == two)
            return true;
        else
            return false;
    }
};

int main()
{
    int test[] = {1,2,2,2,5,6,9,9,9};
    copy(test, test + 9, ostream_iterator<int>(cout));
    unique(test, test + 9, intvgl());
    cout << "\n";
    copy(test, test + 7, ostream_iterator<int>(cout));
    return 0;
}



Nun meine Frage:
Wie muss bspw. unique deklariert sein, um so zu funktionieren?
Mich erstaunt das ganze, weil unique ja eigentlich meine Klasse intvgl gar nicht kennt und dementsprechend auch keine passende Version von unique existieren kann.
Wenn ich noch von binary_function ableiten würde, OK, aber es klappt auch ohne!
Wieso?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.10.2003, 00:33 Uhr
virtual
Sexiest Bit alive
(Operator)


std::unique ist ein Template. Daher ist für std::unique eigentlch nur wichtig, daß ein operator existiert, wie er in intvgl vorkommt. Durch die ersten beiden parameter, die du an std::unique übergeben hast (Anfang und Ende der Sequenz), weiß es welche Typen es zu vergleichen gilt (nämlich ints und der Returntype bool sollte klar sein. Folglich sucht std::unique sich aus dem dritten Parameter, deinem intvgl-Functor, die richtige funktion raus: Templates werden erst dann spezialisiert wenn sie aufgerufen werden ("Spezialisierung": Generierung des echten Codes, gemäß den übergebenen Typen).
Du brauchst auch nicht von std::binary_function abzuleiten: std::binary_function beinhaltet ledigleich typedefs für die typen für den Rückgabewert sowie die beiden Parameter. Da wie gesagt das std::unique eigentlich weiß, um welche Typen es sich handeln muß (wegen der ersten beiden parameter), braucht es diese typedefs garnicht. Wirklich Anwendung findet std::unary/binary_function IMHO nur im zusammenhang mit Binders. Aber das ist wieder eine andere (wenn auch verwandte) Geschichte.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 08.10.2003 um 00:34 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.10.2003, 00:50 Uhr
~(un)wissender
Gast


Ja, logo!
Ich Hornochse, ein Template, ja klar!
Ich programmiere in letzter Zeit echt zuviel Java, da verblödet man.
Danke für deine Ausführung, virtual.
 
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: