Здравствуйте, <Аноним>, Вы писали:
Можно вместо функции сделать замыкание — временный объект с методом:
// исходный API
void _gdTestErrorMsg(const char* file, int line, const char* format, ...);
void _gdTestErrorMsg(const char* file, int line, const char* format, va_args); // без этой функции придётся туго
// добавляем замыкание
struct CTestErrorMsg
{
const char* file;
int line;
CTestErrorMsg(const char* f, int l) : file(f), line(l) {}
void apply(const char* format, ...) const // или operator(), если больше нравится
{
va_list args;
va_start(args, format);
_gdTestErrorMessageV(file, line, format, args);
va_end(args);
}
};
#define gdTestErrorMsg /*(format,...)*/ CTestErrorMsg(__FILE__,__LINE__).apply /*(format,__VA_ARGS__)*/
... << RSDN@Home 1.2.0 alpha rev. 655>>