loswird Gibt es eine allgemeinere Weise, eine Finalizer
Klasse als diese zu schreiben?Wie man die manuelle Klassenschablonen-Parameterspezifikation
#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; });
}
Ich möchte der manuellen Klasse Template-Parameter-Spezifikation, um loszuwerden, der Lage sein, Code wie folgt zu schreiben:
Finalizer finalizer([]() { std::cout << "str" << std::endl; });
Ist es möglich?
Warum nicht direkt 'std :: function' zu schreiben? Oder geben Sie einen Standard-Template-Parameter 'typename T = void()'? –
Garf365
@ Garf365 Um allgemeiner zu sein. Einige Finalizer-Methoden können eigentlich separate Funktionen sein, die Fehlercodes zurückgeben können, aber ich möchte sie trotzdem in der 'Finalizer'-Klasse verwenden und ihre Fehlercodes ignorieren – FrozenHeart
@FrozenHeart Die Verwendung von 'std :: function' wird automatisch ignoriert Das Ergebnis, hier kein Problem. –
lisyarus