Ist das eine gute Lösung, um fehlende partielle Spezialisierung von Funktions-Templates zu kompensieren?



  • Hallo!

    C++ unterstützt ja leider keine partielle Spezialisierung von Funktions-Templates. Also ich würde gern folgendes machen, nur als Beispiel:

    template<int A, int B> int add()
    {
        return A + B;
    }
    
    // partielle Spezialisierung - geht nicht!
    template<int X> int add<X, -X>()
    {
        return 0;
    }
    

    Natürlich ist das Blödsinn, ist nur um die Situation zu beschreiben.
    Ich mach es jetzt so:

    template<int A, int B> struct AddHelper
    {
        static int add()
        {
            return A + B;
        }
    };
    
    // Spezialisierung
    template<int X> struct AddHelper<X, -X>
    {
        static int add()
        {
            return 0;
        }
    };
    
    // "Delegate"
    template<int A, int B> int add()
    {
        return AddHelper<A, B>::add();
    }
    

    Gibt es eine andere/bessere Lösung für sowas?
    Ist das "guter Stil", oder wird man dafür hingerichtet?

    Danke!



  • Ich würde sagen dass das die Standardlösung (tm) ist.
    Hab' ich auf jeden Fall schon öfter mal gesehen, und selbst schon angewendet.

    Geht natürlich nur wenn die Signatur der template Funktion immer gleich ist.


Anmelden zum Antworten