template-Verständnis
-
hallo
es wäre sehr nett, wenn mir jemand das folgene Programm kommentiert und ganz besonders die template-Köpfe. vielen Dank#include <iostream> #include <sstream> #include <string> template<typename t> t &read_type_ref(t &ref, std::string const &prompt = "", //?? std::istream &in = std::cin, //?? std::ostream &out = std::cout) { //?? std::string line; std::istringstream sstr; do { sstr.clear(); out << prompt << std::flush; std::getline(in, line); sstr.str(line); sstr >> ref; } while(!sstr); return ref; } template<> std::string &read_type_ref<std::string>(std::string &ref, std::string const &prompt, std::istream &in, std::ostream &out) { out << prompt << std::flush; std::getline(in, ref); return ref; } template<typename t> t read_type(std::string const &prompt = "", std::istream &in = std::cin, std::ostream &out = std::cout) { t ret; return read_type_ref(ret, prompt, in, out); } int main() { int x = read_type<int>("Zahl eingeben: "); std::string s; std::cout << read_type_ref(s, "Irgendwas eingeben: ") << std::endl << x << std::endl; return 0; }was ist der Unterschied genau zwischen die 3 templates?
Danke sehr
-
bei der ersten funkion übergibst du eine refernz in die gelesen wird
zweite ist eine spezialisierung auf std::string siehe http://www.cpp-tutor.de/cpp/le17/le17_01.htm
bei der dritten funktion wird ein objekt erzeut und die kopie zurückgeben.
-
vielen dank für die Antwort.
könntet ihr vielleicht etwa ausführlicher die templates beschreiben.
vielen dan?
-
lesi19 schrieb:
könntet ihr vielleicht etwa ausführlicher die templates beschreiben.
was meinst du?
-
Danke miller_m, dass du immer noch dabei bist
ich weiss,dass dies vielleicht eine Nummer groß für mich aber muss es verstehen.
warum in der 1. template die referenz ?
wieso wird das objekt erzeugt? verhält ein Funk_template genauso wie Objekt-erzeugung einer klasse oder bin daneben?
Danke
-
du solltest dich mal mit der parameterübergabe (by val, by ref, pointer) auseinander setzten dann wird dir dieses eigentlich klar.
oben rechts findest du ein paar tutorials:
bsp:
http://tutorial.schornboeck.net/referenzen.htm
http://cplus.kompf.de/artikel/funcpar.html