006
18.04.2003, 14:48 Uhr
~0xdeadbeef
Gast
|
Behold!
C++: |
#include <iostream>
using namespace std;
template <bool mod2> struct farbe { static const char *text; }; const char *farbe<true >::text = " ist weiß,"; const char *farbe<false>::text = " ist blau,";
template <bool mod5, bool mod7> struct muster { static const char *text; }; const char *muster<true, true>::text = " hat gelbe Punkte, feine rote Striche und grüne Sternchen"; const char *muster<true, false>::text = " hat gelbe Punkte"; const char *muster<false, true>::text = " hat feine rote Striche"; const char *muster<false, false>::text = " hat kein Muster";
template <bool mod2, bool mod5, bool mod7, bool mod3o11> struct geruch { static const char *text; }; const char *geruch<false, false, false, false>::text = "alten Socken."; const char *geruch<false, false, false, true>::text = "Lagerfeuer."; const char *geruch<true, false, true, true>::text = "Erdbeeren."; const char *geruch<true, false, true, false>::text = "Erdbeeren."; const char *geruch<false, false, true, true>::text = "Erdbeeren."; const char *geruch<false, false, true, false>::text = "Erdbeeren."; template <bool mod2, bool mod5, bool mod7, bool mod3o11> const char *geruch<mod2, mod5, mod7, mod3o11>::text = "einem frisch gezapften Hefeweizen.";
template <int i> struct zahl { static const char *farbe_text; static const char *muster_text; static const char *geruch_text; }; template<int i> const char *zahl<i>::farbe_text = farbe<i%2==0>::text; template<int i> const char *zahl<i>::muster_text = muster<i%5==0, i%7==0>::text; template<int i> const char *zahl<i>::geruch_text = geruch<i%2==0, i%5==0, i%7==0, i%3==0 || i%11==0>::text; const char *zahl<37>::geruch_text = "Imbißbude.";
template <int i> struct my_loop { static void body() { my_loop<i-1>::body(); cout << i << zahl<i>::farbe_text << zahl<i>::muster_text << " und riecht nach " << zahl<i>::geruch_text << endl; } };
struct my_loop<0> { static void body() {} };
int main(int argc, char *argv[]) { my_loop<100>::body(); return 0; }
|
Hehe. Übrigens, gibt es einen Weg wie ich z.B nur zwei von 4 template-Parametern spezialiseren kann? Ich hätte die "Erdbeeren.";-Viecher gerne in einer Zeile zuasmmengefasst, aber der Compiler hat
C++: |
template <bool mod2, bool mod3o11> const char *geruch<mod2, false, true, mod3o11>::text = "Erdbeeren";
|
nicht gefressen, meinte ISO-C++ würde das nicht erlauben. |