Có cách nào chung chung hơn để viết lớp Finalizer
không?Làm cách nào để loại bỏ đặc tả tham số mẫu lớp thủ công
#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; });
}
Tôi muốn thoát khỏi hướng dẫn lớp mẫu đặc tả tham số để có thể viết mã như thế này:
Finalizer finalizer([]() { std::cout << "str" << std::endl; });
Có thể?
Tại sao không viết trực tiếp 'std :: chức năng '? Hoặc đưa ra một tham số mẫu mặc định 'typename T = void()'? –
Garf365
@ Garf365 Để trở nên chung chung hơn. Một số phương thức finalizer có thể thực sự là một hàm riêng biệt có thể trả về mã lỗi nhưng tôi muốn sử dụng chúng trong lớp 'Finalizer' và bỏ qua mã lỗi của chúng trong các tình huống như vậy – FrozenHeart
@FrozenHeart Sử dụng' std :: function 'sẽ tự động bỏ qua kết quả, không có vấn đề ở đây. –
lisyarus