什么是回拨记录的最佳方式?
问题描述:
我有第三方库调用宏进行日志记录。在宏里面,他们使用fprintf进行日志记录。 我正在考虑修改代码来定义自定义回调以进行日志记录,但我不确定什么是最佳方式。什么是回拨记录的最佳方式?
解决方案我想要的是:
- 用户可以定义一个回调记录。
- 如果回调没有定义使用fprint。
所以我正在寻找一些类型的静态函数与默认定义,我可以重写,如果我想。
这样做的最好方法是什么? 由于我们不能重载静态函数,因此每个人都需要定义它们的日志记录功能的定义。
答
事情是这样的:
typedef void (*logfuncp)(...);
logfuncp callbackfuncp = NULL;
void logfunction(...)
{
if (callbackfuncp)
callbackfuncp(...);
else
fprintf(logfile, ...);
}
void setcustomlogfunction(logfuncp newcallback)
{
callbackfuncp = newcallback;
}
应该工作。 ...
代表您的日志参数,当然这可能是使用实际的...
C语法的变量参数,但不一定是。全部取决于你的日志记录。
答
上次我遇到类似问题时,我使用了函数指针。
让记录器使用函数指针调用函数。
默认设置指针到默认的方法(这是调用fprintf中)。
如果用户想要重写该行为,他们会用自己的功能。
....只是另一种解决方案