Variadic Templates - Addition von int und string
-
Hallo,
ich möchte mit variabler Anzahl von Argumenten eine Addition durchführen. Das klappt auch ohne Probleme, wenn ich die Addition für int und string getrennt durchführe. Jedoch möchte ich, dass es der Compiler erkennt um welchen Datentyp es sich dabei handelt und die jeweilige Addition durchführt.
#include <iostream> #include <string> using namespace std; int zahl; string zeichen; void addieren() { cout << "Das Ergebnis lautet: " << zahl << endl; } template <typename T, typename... Args> void addieren(const T& arg1, const Args & ... args) { zahl = zahl + arg1; addieren(args ...); } int main() { addieren(1, 2, 3); //addieren("1", "2", "3"); }Ich habe es schon versucht mit:
typeid(arg1).name();Einfach den Datentyp abfragen und dann die entsprechende Addition durchführen. Jedoch klappt es so nicht, wie ich es mir vorgestellt habe. Das wäre auch so nicht elegant, denke ich mal. Anschließend habe ich einiges über Spezialisierung gelesen. Jedoch sind es nur Beispiele ohne variabler Anzahl von Parameter.
Ich denke, dass ich so was in der Art brauche:
template <> void addieren<int> { } template <> void addieren<string> { }Aber wie oben erwähnt, wie muss ich das genau schreiben?
Danke schon mal.
-
ganz falscher Ansatz: Nutze keine globalen Variablen.
template <class T> T addieren(T&& arg0) { return arg0; } template <typename T, typename... Args> T addieren(const T& arg0, Args&&... args) { return arg0 + addieren(std::forward<Args>(args)...); }Es funktioniert mit allem, aber nur wenn der + operator den Typ T zurückliefert, aber für int und std::string ist das alles in Ordnung.
-
Danke! Klappt wunderbar.
-
Wofür brauchst du das?