Esiste un modo più generico per scrivere una classe Finalizer
rispetto a questa?Come eliminare la specifica del parametro del modello di classe manuale
#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; });
}
voglio sbarazzarsi della specifica manuale dei parametri di modello di classe per essere in grado di scrivere codice come questo:
Finalizer finalizer([]() { std::cout << "str" << std::endl; });
E 'possibile?
Perché non scrivere direttamente 'std :: funzione'? Oppure fornire un parametro template predefinito 'typename T = void()'? –
Garf365
@ Garf365 per essere più generico. Alcuni metodi di finalizzazione possono in realtà essere funzioni separate che possono restituire codici di errore, ma voglio usarli comunque nella classe 'Finalizer' e ignorare i loro codici di errore in tali situazioni – FrozenHeart
@FrozenHeart L'uso di' std :: function 'verrà automaticamente ignorato il risultato, nessun problema qui. –
lisyarus