Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » struct Delete

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
15.12.2007, 15:45 Uhr
banshee



hallo,

alles, was jetzt folgt, dreht sich um folgendes Codestück:


C++:
struct Delete
{
  template<typename T>
  void operator()(T* p)
  {
    delete p;
  }
};

std::for_each(entries.begin(), entries.end(), Delete());



Ich möchte einfach mal wiedergeben, wie ich das ganze verstehe, weil ich mir nicht sicher bin, ob ich es in seiner Gesamtheit richtig verstanden habe.

Also zunächst einmal wird eine Struktur definiert und deren Funktionsausruf-Operator als template überladen. Im Template wird dann einfach das übergebene Objekt gelöscht. Und in der Codezeile darunter werden dann alle Elemente eines Vektors nacheinander gelöscht. Da weiß ich aber nicht, wie das genau funktioniert. Der dritte Parameter von for_each muss ja eine Funktion sein. Wird da jetzt erst der Konstruktor der Struktur aufgerufen, um dann direkt an den überladenen Operator ranzukommen oder wie soll ich mir das vorstellen?

Meine zweite Frage wäre, was diese Struktur modellieren soll, weil man könnte doch auch einfach ein Funktionstemplate schreiben.

Danke schonmal im Voraus

Dieser Post wurde am 15.12.2007 um 15:46 Uhr von banshee editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.12.2007, 17:55 Uhr
0xdeadbeef
Gott
(Operator)


Eine Funktionsvorlage müsstest du per Hand konkretisieren, um eine Funktion zu kriegen, die du übergeben könntest. Das macht das struct hier einfacher anzuwenden.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.12.2007, 22:17 Uhr
banshee



hm, also


C++:
template<class T>  

void T Delete(T x) { delete x; }
funktioniert nicht?

Wird diese Zeile mit for_each eigentlich zu:

Delete(entries.get(0));
Delete(entries.get(1));
Delete(entries.get(2));
...

evaluiert?

Dieser Post wurde am 15.12.2007 um 22:18 Uhr von banshee editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.12.2007, 23:21 Uhr
0xdeadbeef
Gott
(Operator)


for_each wird in aller Regel wohl in etwa als

C++:
template<typename iter_t, func_t>
func_t for_each(iter_t start, iter_t finish, func_t func) {
  for(; start != finish; ++start) {
    func(*start);
  }
  return func;
}


implementiert sein. Mit deiner Delete-Funktionsvorlage müsstst du for_each als

C++:
std::for_each(entries.begin(), entries.end(), Delete<werttyp_von_entries>);


aufrufen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
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: