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


Anmelden zum Antworten