c – 将仿函数保留为变量
发布时间:2020-12-16 03:36:50 所属栏目:百科 来源:网络整理
导读:我正在研究资源管理类,并希望让用户为“ReleaseResource”方法提供一个函子,作为资源管理器构造函数的一部分.从那里请求资源时,将提供functor作为我将返回的shared_ptr的删除器,以便在不再使用资源时调用适当的方法. 我遇到的问题是,这要求我将仿函数存储在
我正在研究资源管理类,并希望让用户为“ReleaseResource”方法提供一个函子,作为资源管理器构造函数的一部分.从那里请求资源时,将提供functor作为我将返回的shared_ptr的删除器,以便在不再使用资源时调用适当的方法.
我遇到的问题是,这要求我将仿函数存储在我的班级中,而我并不完全确定如何做到这一点.通常在使用仿函数时,您可以像这样模拟函数: template<class MyFunctor> MyMethod(MyFunctor f) { f(); } 如果您打算在该函数的范围内使用该仿函数,这很好,但由于该模板超出了该函数的范围我不知道您将如何指定适当类型的变量来存储仿函数供以后使用. 任何人都能指出我在正确的方向吗? 解决方法template<class MyFunctor> MyMethod(MyFunctor f) { boost::function<void()> g = f; g(); } 传递给 template<class MyFunctor> MyMethod(MyFunctor f) { boost::shared_ptr<T> ptr(new T,f); } boost :: function是 struct Manager { template<typename Deleter> Manager(Deleter d) :deleter(d) { } boost::shared_ptr<Resource> allocate() { ... return boost::shared_ptr<Resource>(resource,deleter); } private: boost::function<void(Resource *)> deleter; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |