Вперед функция с переменным количеством аргументов в C++
Привет ребята,
Я использую SDL в своей игре, которая имеет хорошую функцию ведения журнала под названием SDL_Log().
Я хотел бы использовать это, но предпочитаю использовать другое имя для функции (например, GameLog()). Причина в том, что если я когда-нибудь захочу добавить функциональность к этой функции ведения журнала, я могу просто сделать это в одном месте. Кроме того, если я когда-нибудь переключусь с SDL на Allegro или другую 2D-мультимедийную библиотеку, мне не придется менять это везде в своем коде.
Проблема в том, что я понятия не имею, как это сделать. Эта функция определяется следующим образом:
void SDL_Log(const char* fmt, ...)
Как я смогу это сделать?
Что я уже пробовал:
Я попробовал использовать #defines (но даже если я не могу заставить его работать, я предпочитаю не использовать для этого код пропроцессора).
Я попробовал использовать typedef, используя va_list, va_start, va_arg и т. д.
Приведенный ниже код не сработал.
void GameLog(const char* log, ...) { va_list args; va_start(args, log); SDL_Log(log, args); va_end(args); }
Есть ли кто-нибудь, кто имеет представление, как это сделать?
Сначала я думал, что это будет просто сделать, но я боролся с этим уже много дней.
Gerry Schmitz
Похоже, тебе нужна "обертка":
https://stackoverflow.com/questions/879408/c-function-wrapper-that-behaves-just-like-the-function-itself
robvleugel
Хм, Да, но ни одно из решений, похоже, не работает. Обычные указатели функций, например, здесь не делают трюка, так как std::function, похоже, не принимает (...).
Richard MacCutchan
Сначала вам нужно посмотреть документацию для SDL_Log, чтобы увидеть, какие параметры он ожидает.
robvleugel
Я отдал его, его:
void SDL_Log(const char* fmt, ...)
То... означает переменное число аргументов. Вот что делает это занозой в заднице для меня.
Richard MacCutchan
Но это не то, что вы пытаетесь передать.