在不模板化类的情况下存储 lambda

Storing lambda without templatizing class

本文关键字:情况下 存储 lambda      更新时间:2023-10-16
class what {
template<class F>
what(F&& f) {}
};

这里F是一个lambda,如何在不模板化整个类的情况下将其存储在成员变量中?

这就是std::function的用途。假设您希望what存储一个可调用对象,该可调用对象将int作为参数并返回void。然后你会写这样的东西:

class what
{
public:
template<class T>
what(T&& t) : callback(std::forward<T>(t)) {}
private:
std::function<void(int)> callback;
};

您甚至可以使构造函数本身不是模板:

class what
{
public:
what(std::function<void(int)> callback) : callback(std::move(callback)) {}
private:
std::function<void(int)> callback;
};
相关文章: