Having Ich versuche, eine generische Funktion für die Anmeldung ein paar Sachen für das Debuggen zu schreiben, und ich möchte, wie so es beispielsweise nennen:Probleme mit C++ variadische Template-Parameter
Log("auo", 34); //writes: auo34
Point point;
point.X = 10;
point.Y = 15;
Log(35, point, 10); //writes: 35{10, 15}10
Aber ich habe alle möglichen Probleme mit dem Packen und Entpacken der Parameter, ich kann nicht den Dreh raus bekommen. Unten ist der vollständige Code:
struct Point {
long X, Y;
}
std::ofstream debugStream;
template<typename ...Rest>
void Log(Point first, Rest... params) { //specialised for Point
if (!debugStream.is_open())
debugStream.open("bla.log", ios::out | ios::app);
debugStream << "{" << first.X << ", " << first.Y << "}";
Log(params...);
}
template<typename First, typename ...Rest>
void Log(First first, Rest... params) { //generic
if (!debugStream.is_open())
debugStream.open("bla.log", ios::out | ios::app);
debugStream << first;
Log(params...);
}
Wie kann ich die Funktionen bitte reparieren?
Sie müssen einen Basisfall für den letzten rekursiven Aufruf bereitstellen, wenn das Parameterpaket leer ist und ein Aufruf von 'Log()' ausgewertet wird. Hinzufügen einer 'void Log() {}' Überladung sollte ausreichen. – DeiDei