Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » verkettete Liste

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 ] [ 2 ] [ 3 ] > 4 <
030
05.08.2004, 15:03 Uhr
0xdeadbeef
Gott
(Operator)


Wenn C++ nur eine objektorientierte Erweiterung zu C ist, dann erklär mir das:

C++:
#include <iostream>

template<int i> struct fib { static const long double val = fib<i-1>::val + fib<i-2>::val; };
template<> struct fib<0> { static const long double val = 0; };
template<> struct fib<1> { static const long double val = 1; };

template<int i> struct do_loop {
  static void run() {
    do_loop<i-1>::run();
    std::cout << i << ":\t" << fib<i>::val << std::endl;
  }
};
template<> struct do_loop<-1> { static void run() {} };

int main() {
  std::cout.setf(std::ios::fixed);
  std::cout.precision(0);

  do_loop<95>::run();

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
031
05.08.2004, 21:03 Uhr
Zero



Dafür reicht meine Erfahrung nicht aus da ich mit einigen Zeilen dieses Codes noch nie gearbeitet habe (sehe ich ehrlich gesagt zum ersten mal). Für was verwendet man diesen Code insgesammt?




C++:
template<int i> struct fib { static const long double val = fib<i-1>::val + fib<i-2>::val; };
template<> struct fib<0> { static const long double val = 0; };
template<> struct fib<1> { static const long double val = 1; };




wie kann ich die Logik des ersten templates fib verstehen, ich meine das was du val
zuweist.

Wenn das eine Klasse (Struktur) sein soll ist fib<i-1>:: absolut Neuland

Behandelst du die structs wie eine art array ?

Dieser Post wurde am 05.08.2004 um 21:04 Uhr von Zero editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
032
07.08.2004, 12:43 Uhr
0xdeadbeef
Gott
(Operator)


Dieser Code ist das kanonische Meta-Programming-Beispiel. C++ ist weniger eine objektorientierte als viel mehr eine generische Sprache, und Meta-Programming ist eine der perverseren Anwendungsmöglichkeiten des generischen Paradigmas - im Grunde lasse ich den Compiler die Fibonacci-Zahlen ausrechnen, so dass der Kram zur Laufzeit nicht mehr berechnet werden muss.

Ohne die template-Nummer sähe das äquivalente Programm so aus:

C++:
#include <iostream>

int main() {
  std::cout.setf(std::ios::fixed);
  std::cout.precision(0);

  std::cout << 0 << ":\t" << 0.0L << std::endl;
  std::cout << 1 << ":\t" << 1.0L << std::endl;
  std::cout << 2 << ":\t" << 1.0L << std::endl;
  std::cout << 3 << ":\t" << 2.0L << std::endl;
  std::cout << 4 << ":\t" << 3.0L << std::endl;
  std::cout << 5 << ":\t" << 5.0L << std::endl;
  //...
  std::cout << 95 << ":\t" <<  31940434634990099906.0L << std::endl;

  return 0;
}


...was deutlich umständlicher wäre.

Der Trick an templates ist, dass sie zur Compilezeit konkretisiert werden und sich mit so ziemlich allem parametrisieren lassen - zugegeben, die häufigste Anwendung sind typenames a la

C++:
template <typename content_t> class list {
//...
};

//...
list<int> ls;


aber gerade, wenn man sich boost ankuckt, sieht man, dass sich damit noch viel krasserer Kram machen lässt.

Was fib<i-1> angeht, das ist ne Instanziierung. Der template-Parameter i ist konstant, also ist auch i-1 konstant, also steht der Kram zur Compilezeit fest und kann man fib damit konkretisieren.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 07.08.2004 um 12:48 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
033
07.08.2004, 15:11 Uhr
Zero



Thx für deine Arbeit !

ich werde anhand von deinen Schilderungen und ein paar Büchern mal versuchen mir diese Sache zu erarbeiten, momentan verstehe ich ca 40 % von dem was du sagst

Sag mal, wieviele Jahre Programmierst du schon ?

Hatte mir eigentlich vorgenommen nächstes Semester Informatik an der FH Fulda zu studieren, aber wenn ich sowas sehe gibts noch ganz schön nachholbedarf
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
034
07.08.2004, 15:22 Uhr
Spacelord
Hoffnungsloser Fall


Mit rekursiven Templates wirst du an der Uni(FH) nicht konfrontiert .

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
035
07.08.2004, 15:28 Uhr
Zero



*schnauf*

In meiner Ausbildung haben wir hauptsächlich mit verketteten Listen gearbeitet (und halt alles bis zum Weg dahin). Hoffentlich hilft mir das etwas an der FH
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
036
08.08.2004, 17:05 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von Zero:

Sag mal, wieviele Jahre Programmierst du schon ?


Das kommt drauf an, was du als Programmieren bezeichnest. In der fünften Klasse hab ich so kleine BASIC-Programme geschrieben, das war vor 11 Jahren. Wirklich ernsthaft Programmieren...ich denke, da kann man ab der 12ten zählen, also 4 Jahre. Den ganzen template-Kram hab ich aber auch erst vor 1-2 Jahren wirklich gerafft, was weniger damit zusammen hing, dass der template-Kram so unglaublich kompliziert wäre, sondern mehr damit, dass man mir immer erzählt hat, C++ sei so ne Art objektorientierte C-Erweiterung. Ich dachte lange Zeit, templates wären so was wie die generics, die sie jetzt in Java einführen, und hab halt das generische Paradigma von C++ überhaupt nicht gesehen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] > 4 <     [ 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: