Finalizer
クラスをこれよりも一般的な方法で書くことはできますか?手動クラステンプレートのパラメータ指定を取り除く方法
#include <functional>
#include <iostream>
template <typename T>
class Finalizer
{
public:
Finalizer(const std::function<T>& f) : _f(f) {}
~Finalizer()
{
_f();
}
private:
std::function<T> _f;
};
int main()
{
Finalizer<void()> finalizer([]() { std::cout << "str" << std::endl; });
}
私はこのようなコードを書くことができるように手動でクラスのテンプレートパラメータの指定を取り除きたい:
Finalizer finalizer([]() { std::cout << "str" << std::endl; });
それは可能ですか?
?あるいは、デフォルトのテンプレートパラメータ 'typename T = void()'を与えますか? – Garf365
@ Garf365より一般的にする。いくつかのファイナライザメソッドは実際にはエラーコードを返すことができる別個の関数ですが、私は 'Finalizer'クラスでそれらをそのまま使用し、そのような状況ではエラーコードを無視したいと考えています – FrozenHeart
@FrozenHeart' std :: function '結果、問題はない。 –
lisyarus