0

C++ で Python モジュールを作成しました。すべて正常に動作しますが、ログを追加したいと思います。私のロガー クラス (サード パーティ) では、次のような初期化が必要です。

int main()
{
    Logger logger("log.log");
    Logger::Register(&logger);

    DoSomethingAndLog();
    return 0;
}

ご覧のとおりlogger、プログラムの初期化時に作成され、プログラムの終了時に破棄されます。

Loggerモジュールのロード時にオブジェクトが構築され、モジュールのアンロード時にオブジェクトが破棄されるようにするには、どこでオブジェクトを作成しますか?

4

1 に答える 1

0

オブジェクトをクラスにラップし、Loggerそのクラスのグローバル インスタンスを宣言できます。Loggerこのアプローチは、コンストラクターとデストラクターで初期化と初期化解除を制御できるため、生のグローバル変数よりも少し有利です。オブジェクトへのアクセスを制限することもできLoggerます。

class TheLogger
{
public:
  TheLogger() { Logger::Register(&_logger); }
  ~TheLogger() { Logger::Unregister(&_logger); }

  Logger& GetLogger() { return _logger; }

private:
  Logger _logger;
};

TheLogger theLogger;

int main()
{
  DoSomethingAndLog();

  theLogger.GetLogger().Log("...");

  return 0;
}
于 2012-08-19T16:24:40.457 に答える