Methode einer Template-Klasse spezialisieren



  • Hallo zusammen,

    ich schreibe grade einen Template-Container (nein, STL geht grade leider aus diversen Gründen nicht) der sortierbar sein soll. Die Art der Sortierung hängt von dem konkreten Template Parameter des Containers ab. Soll heissen, ich möchte die sort()-Methode des Containers abhängig von dem für den Container verwendeten Template-Argument überladen bzw. spezialisieren (je nach dem was besser geht). Blödes konstruiertes Beispiel: ein int-Container braucht eine andere sortierung als ein std::string-Container. Leider schlägt bisher alles fehl was ich versuche.

    Das ist nur zur internen Verwendung für ein spezielles Projekt, von daher tut es nicht weh wenn ich jede Spezialisierung direkt in der Container-Klasse vornehmen muss. Wenn ich die Sortierungsfunktion unkompliziert per Template-Parameter einbringen kann, ist das natürlich um so schöner, aber nicht notwendig.

    Irgendwelche Ideen?



  • Biete iteratoren an und benutze std::sort.



  • MrSandman schrieb:

    ich schreibe grade einen Template-Container

    Aha?! Interessant. Kann man darin Templates speichern? 😉

    Was spricht denn gegen die Art und Weise, wie std::map die Sache händelt? Also in etwa so:

    template<class T, class Ord = std::less<T>>
    class my_container {...}
    


  • nwp3 schrieb:

    Biete iteratoren an und benutze std::sort.

    Ist leider nicht wirklich praktikabel. Bei std::sort muss ich ein Prädikat angeben für alles was nicht per operator< sortiert werden kann. Soll heissen, ich muss überall wo ich container.sort() aufrufe(n würde) eine Prädikat definieren oder irgendwo her zaubern. Das wollte ich ja grade umgehen. Da die Anzahl der unterschiedlichen Datentypen sehr überschaubar ist macht es Sinn, dass gleich in dem Cotainer-Header vorzunehmen, entweder per typedef oder direkt in der Klasse.



  • kkaw schrieb:

    MrSandman schrieb:

    ich schreibe grade einen Template-Container

    Aha?! Interessant. Kann man darin Templates speichern? 😉

    Was spricht denn gegen die Art und Weise, wie std::map die Sache händelt? Also in etwa so:

    template<class T, class Ord = std::less<T>>
    class my_container {...}
    

    Ha! Manchmal sind es echt die einfachen Dinge... ich hab versucht Funktionen und Lambdas als Templateparameter zu nehmen, Methoden partiell zu spezialisieren und zu überladen... macht alles nur Ärger. Aber Funktoren funktionieren tatsächlich absolut einwandfrei. Danke schön!


Log in to reply