1

ロギング用のマクロを呼び出すサードパーティのライブラリがあります。そのマクロ内では、ロギングにfprintfを使用しています。ロギング用のカスタムコールバックを定義するようにコードを変更することを考えていますが、何が最善の方法かわかりません。

私が欲しい解決策は:

  • ユーザーは、ロギングのコールバックを定義できます。
  • コールバックが定義されていない場合は、fprintを使用してください。

だから私は必要に応じてオーバーライドできるデフォルトの定義を持つある種の静的関数を探しています。

これを行うための最良の方法は何でしょうか?静的関数をオーバーロードできないため、誰もがロギング関数の定義を定義する必要があります。

4

2 に答える 2

1

このようなもの:

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

logfuncp callbackfuncp = NULL;

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


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

動作するはずです。は...ロギング引数を表します。もちろん、実際の...C構文を使用するvar-argsである可能性がありますが、そうである必要はありません。すべてはあなたのロギングが何であるかに依存します。

于 2012-12-29T14:38:43.353 に答える
0

前回同様の問題が発生したときは、関数ポインタを使用しました。

ロガーに関数ポインターを使用して関数を呼び出させます。

デフォルトでは、ポインタをデフォルトのメソッド(fprintfを呼び出している)に設定します。

ユーザーがその動作をオーバーライドしたい場合は、独自の関数を使用します。

....ちょうど別の解決策

于 2012-12-29T14:34:14.743 に答える