c 11:创建函数的最简单方法是返回true以用于函数参数
发布时间:2020-12-16 10:13:33 所属栏目:百科 来源:网络整理
导读:我想使用以下模板成员函数 template typename Entityclass SomeCollection{ // .... template typename Measure,typename Filter Entity maximalEntity(Measure measure,Filter requirement) { auto maxEntity = Entity(); auto maxValue = -std::numeric_li
我想使用以下模板成员函数
template <typename Entity> class SomeCollection { // .... template <typename Measure,typename Filter> Entity maximalEntity(Measure&& measure,Filter&& requirement) { auto maxEntity = Entity(); auto maxValue = -std::numeric_limits<double>::infinity(); for (auto ent /* some iteration method*/) { auto measurement = measure(ent); if (requirement(ent) && measurement > maxValue) std::tie(maxEntity,maxValue) = std::make_tuple { ent,measurement }; } return maxEntity; } // ... }; 在没有Filter要求的情况下从客户端代码调用此函数的最佳方法是什么(只有最大元素)? 我能想到的最好的是: class Something; double measure(Something&); SomeCollection<Something> collection; auto maximum = collection.maximalEntity(measure,[](const Something&) { return true; }); 但我猜这个lambda函数可以改进吗? 解决方法
不确定如何改进lambda,但是你可以定义一个通用的lambda,给定任何输入总是返回true(也可以在这里使用):
auto always_true = [](auto&&...) { return true; }; 你会用它作为: auto maximum = collection.maximalEntity(measure,always_true); Live demo C 11的等效实现如下: struct always_true { template<typename... Args> bool operator()(Args&&...) const noexcept { return true; } }; 然后将用作: auto maximum = collection.maximalEntity(measure,always_true{}); Live demo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读