Funktionsdeklaration - Template Parameter genauer spezifizieren



  • Sagen wir ich habe eine Member Funktion, die 2 Input Iteratoren entgegennimmt, aehnlich einigen std Algorithmen. Nun habe ich die Funktion folgendermassen deklariert:

    template<typename InputIterator>
    void add_to_archive(InputIterator first, InputIterator last);

    Nun moechte ich, dass sich die Funktion von selbst erklaert, denn ein Input Iterator kann ja auf alles moegliche verweisen, in diesem Fall ist es aber so, dass die Funktion Iteratoren auf einen Container von strings benoetigt, alles andere waere falsch. Wie kann ich diese Konzept schon in der Deklaration der Funktion einbringen?



  • meinst du sowas ?

    template<>
    void add_to_archive(std::string::iterator,std::string::iterator);
    


  • Nicht gut. Du könntest zwar einen

    T<string>::iterator

    verlangen, aber das wäre nicht ideal.

    Mach doch einfach einen ConceptCheck (zB mit dem framework von boost) so dass wenn iterator_traits<itearor>::value_type nicht string ist, ein Fehler kommt. so hast du es zwar nicht im Kopf der Funktion festgelegt, aber dennoch einen vernünftigen Compilerfehler.



  • Hem, finde ich aber auch nicht so toll. Ich sehe lieber an der Funktionssignatur sofort, was die von mir will. Wenn ich erst in der Implementierung einen Compile-Error erhalte, würde ich ausrasten. Die ganze Arbeit umsonst... 😡

    prologs Variante würde ich persönlich vorziehen.



  • Ausserirdischer will bestimmt haben das std::liststd::string, std::vectorystd::string usw. erlaubt sind.



  • Artchi schrieb:

    Wenn ich erst in der Implementierung einen Compile-Error erhalte, würde ich ausrasten. Die ganze Arbeit umsonst... 😡

    Doku lesen waere praktisch 😉

    Ist ja nicht so dass die Beschraenkungen willkuerlich sind...

    prologs Variante würde ich persönlich vorziehen.

    Ist aber bloedsinn Es geht naemlich nicht um einen string sondern um einen Container von Strings und da zieht das nicht mehr, weil
    T<string>::iterator
    kacke ist.



  • Jopp falsch verstanden .. sry



  • Danke fuer die Antworten, also lass ich die Funktion so und verwende einen concept check + Kommentar.


Anmelden zum Antworten