Я пытаюсь написать обобщенную функцию для входа некоторого материала для отладки, и я хочу, чтобы назвать это, например, так:Возникли проблемы с C++ параметров шаблона
Log("auo", 34); //writes: auo34
Point point;
point.X = 10;
point.Y = 15;
Log(35, point, 10); //writes: 35{10, 15}10
Однако, у меня всевозможные проблемы с упаковкой параметров и распаковкой, я не могу понять, что это происходит. Ниже приведен полный код:
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...);
}
Как исправить функции, пожалуйста?
Вам необходимо предоставить базовый футляр для последнего рекурсивного вызова, когда пакет параметров будет пустым и будет вызываться вызов 'Log()'. Добавление «void Log() {}' перегрузки должно быть достаточно. – DeiDei