Generischer operator+ funktioniert nur bei int



  • Hallo liebes Forum 😉

    Ich habe eine Klasse mit folgendem Inhalt:

    namespace Datatypes {
    namespace Internal {
    template <typename TYPE,TYPE MIN,TYPE MAX>
    class Number {
    public:
    	template<TYPE OTHER_MIN,TYPE OTHER_MAX>
    	Number<TYPE,OTHER_MIN + MIN,OTHER_MAX + MAX> operator+(const Number<TYPE,OTHER_MIN,OTHER_MAX>& other);
    
    .
    .
    .
    

    Folgender Code compiliert und funktioniert problemlos:

    Number<int,1,2> n(1);
    	Number<int,1,2> m(1);
    	Number<int,1,2> o(1);
    
    	Number<int,2,6> result;
    
    	result = n+m+o;
    

    Wenn ich jetzt das int durch einen anderne Typen wie z.b. char, short oder long austausche haut mir der Compiler folgenden Fehler um die Ohren:

    error: no match for ‘operator+’ in ‘n + m’
    

    Ich kann mir absolut nicht erklären warum. Hat jemand von euch eine Idee?



  • Wenn du alle Typen austauscht (im 2. Listing) sollte es funktionieren. Minimales kompilierbares Beispiel, bitte.



  • Ich würd zum Einen keine Bezeichner verwenden, die nur aus Großbuchstaben bestehen (Makros und ggf. Enum-Werte mal ausgenommen).
    Ansonsten kann ich mich dem Vorredner nur anschließen. Liefere uns bitte den Code, der die Fehlermeldung erzeugt, sonst kann man dir schlecht helfen.



  • Ja, wahrscheinlich werden bei ihm noch vorher irgendwo MIN/MAX Makros definiert, die da was durcheinander bringen. Deswegen verwende ich für Template-Parameter auch den CamelCase-Stil.

    Makros: ALLES_GROSS
    Template-Parameter: CamelCase
    Rest: alles_klein



  • Ich habe überall CamlCase (Makros hab ich nicht).



  • Wer welchen Case benutzt ist hier weitgehend irrelevant, nur die UPPERCASE-notation sollte man mit Bedacht verwenden.


Anmelden zum Antworten