什么是回拨记录的最佳方式?

问题描述:

我有第三方库调用宏进行日志记录。在宏里面,他们使用fprintf进行日志记录。 我正在考虑修改代码来定义自定义回调以进行日志记录,但我不确定什么是最佳方式。什么是回拨记录的最佳方式?

解决方案我想要的是:

  • 用户可以定义一个回调记录。
  • 如果回调没有定义使用fprint。

所以我正在寻找一些类型的静态函数与默认定义,我可以重写,如果我想。

这样做的最好方法是什么? 由于我们不能重载静态函数,因此每个人都需要定义它们的日志记录功能的定义。

事情是这样的:

typedef void (*logfuncp)(...); 

logfuncp callbackfuncp = NULL; 

void logfunction(...) 
{ 
    if (callbackfuncp) 
     callbackfuncp(...); 
    else 
     fprintf(logfile, ...); 
} 


void setcustomlogfunction(logfuncp newcallback) 
{ 
    callbackfuncp = newcallback; 
} 

应该工作。 ...代表您的日志参数,当然这可能是使用实际的... C语法的变量参数,但不一定是。全部取决于你的日志记录。

上次我遇到类似问题时,我使用了函数指针。

让记录器使用函数指针调用函数。

默认设置指针到默认的方法(这是调用fprintf中)。

如果用户想要重写该行为,他们会用自己的功能。

....只是另一种解决方案