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.