Template-Problem [SOLVED]



  • Hallo zusammen,

    ich möchte mir ein Template für die Ausgabe von Collections machen.

    template<class T> void printList(std::ostream& s, const std::vector<T>& vec, const char* del){
      bool first = true;
      for (std::vector<T>::const_iterator it = vec.begin(); it != vec.end(); ++it) {
         if(!first)
           s << del;
         else
           first = false;
         s << *it;
      }
    }
    

    Mit std:vector funktioniert das auch ganz gut.
    Krieg ich das auch irgendwie hin, dass es für alle Klassen mit const_iterator
    funktioniert?

    So geht es z. B. nicht:

    template<class cT <class T> > void printList(std::ostream& s, const cT& vec, const char* del);
    
    template<class cT = std::vector, class T> void printList(std::ostream& s, const cT<T>& vec, const char* del);
    

    Gibt es ne Möglichkeit?

    Gruß,
    CSpille



  • Warum einfach, wenn's auch kompliziert geht?

    template<class CT> void printList(std::ostream& s, const CT& vec, const char* del){
      bool first = true;
      for (typename CT::const_iterator it = vec.begin(); it != vec.end(); ++it) {
         if(!first)
           s << del;
         else
           first = false;
         s << *it;
      }
    }
    

    Das schluckt alle STL-artigen Containerklassen als Datenquelle. (sprich: alles, was einen const_iterator (OutIt) und die Methoden begin() und end() bereitstellt)

    PS: den letzten Parameter würde ich als string übergeben.



  • Oh man...

    wie dumm...

    Danke CStoll!!!



  • Hi,

    also ich steh' ja auf den "copy-Trick"

    std::vector<int> vec;
    copy(vec.begin(), vec.end(), std::ostream_iterator<int>(cout, " ") );
    

    Ich wüsste nicht, wie man das mit einem eigenen template noch verkürzen oder verallgemeinern könnte...

    Gruß,

    Simon2.



  • Hey Simon2...

    Der Copy-Trick ist wirklich cool 🕶



  • CSpille schrieb:

    Hey Simon2...

    Der Copy-Trick ist wirklich cool 🕶

    ... ist auch nicht von mir. 😃

    Gruß,

    Simon2.


Anmelden zum Antworten