Template, Veraerbung
-
desert pinguin schrieb:
Es gibt noch eine Möglichkeit, die explizite Instantiierung heisst.
//die Zeile gehoert zu der Cpp-Datei template class B<int>;
Schon. Und so kann ich eine Funktion schreiben, die 42 zurückgibt:
int zweiundvierzig () { return 42; }
-
Ach ja, eigentlich schreibt man in solchen Fällen ja einfach ein 99 Bottles of Bear programm als Antwort:
module Main where newtype Bottle = Bot Int instance Show Bottle where show (Bot 0) = "No more bottles" show (Bot 1) = "1 bottle" show (Bot n) = show n ++ " bottles" data Line = Simple String | Complex Bottle String instance Show Line where show (Simple s) = s show (Complex b s) = show b ++ s verse n = [Complex (Bot n) " of beer on the wall,", Complex (Bot n) " of beer.", Simple "Take one down pass it around", Complex (Bot $ n-1) " of beer on the wall.\n"] main = do mapM print $ concatMap verse [99, 98 .. 1]
-
Helium schrieb:
desert pinguin schrieb:
Es gibt noch eine Möglichkeit, die explizite Instantiierung heisst.
//die Zeile gehoert zu der Cpp-Datei template class B<int>;
Schon. Und so kann ich eine Funktion schreiben, die 42 zurückgibt:
int zweiundvierzig () { return 42; }
Ich wollte nur sagen, dass in diesem Fall keine cpp-Datei beinhalten werden muss. Nur die header-datei.
-
Shade Of Mine schrieb:
Die Endung .cpp ist schlecht gewählt, aber so ein #include ist gängige Praxis.
Wenn jemand die Elementfunktionen in eine separate Datei steckt, soll er das von mir aus tun (auch wenn ich keinen Vorteil darin sehe?), aber .cpp und MSVC klingt schon warnenswert. Vor allem, weil es anfangs problemlos funktioniert und erst später zu Fehlern führt, wenn man z.B. eine nicht-template-Hilfsfunktion definiert. (Klar kann man die Kompilierung für einzelne Dateien abschalten, aber das ist auch nicht Sinn der Sache...)