6

私はリソース管理クラスに取り組んでおり、ユーザーがリソース マネージャーのコンストラクターの一部として "ReleaseResource" メソッドにファンクターを提供するようにしたいと考えています。そこからリソースが要求されると、リソースが使用されなくなったときに適切なメソッドが呼び出されるように、返される shared_ptr の削除者としてファンクターが提供されます。

私が直面している問題では、クラスにファンクターを保存する必要がありますが、その方法が完全にはわかりません。通常、ファンクターを使用する場合、次のように関数をテンプレート化します。

template<class MyFunctor> MyMethod(MyFunctor f) {
    f();
}

その関数のスコープでファンクターを使用する場合はこれは素晴らしいことですが、テンプレートが関数のスコープ外になるため、後で使用するためにファンクターを格納するために適切な型の変数を指定する方法がわかりません.

ここで誰かが私を正しい方向に向けることができますか?

4

3 に答える 3

0

これが役立つかどうかはわかりませんが、boost::shared_ptr には、ユーザーがカスタムの割り当て解除 (および必要に応じてカスタムのアロケーター) を含めることができるコンストラクターのオーバーライドがあることに注意してください。これは、必要なものには十分かもしれません(ユースケースを正しく読んでいれば、それを念頭に置いて設計されています)。

于 2009-01-23T20:04:50.713 に答える