是否可以直接将依赖于实例的成员函数(方法)从另一个成员函数传递给 STL 的算法?
Posted
技术标签:
【中文标题】是否可以直接将依赖于实例的成员函数(方法)从另一个成员函数传递给 STL 的算法?【英文标题】:Is it possible to pass member function (method) dependent on instance to STL's algorithm from another member function, directly? 【发布时间】:2020-04-21 15:11:54 【问题描述】:我想做这样的事情:
#include <algorithm>
#include <vector>
class Multiplier
public:
double multiply_by;
double apply(double x) return x * multiply_by;
std::vector<double> transform(const std::vector<double>& v)
std::vector<double> res;
std::transform(begin(v), end(v), std::back_inserter(res), this::apply); // I have an error on this::apply
return res;
;
int main()
std::vector<double> v1,2,3,4,5;
Multiplier multiplier3;
auto res = multiplier.transform(v);
我看到了 std::mem_fun() 和 std::bind2nd() 的解决方案,我知道通过 lambda 解决方法。
但是否存在更方便的方法来实现这一点,可能在最后的 c++ 标准中?
(因为我看到的关于 mem_fun 的答案有点老了。)
谢谢。
【问题讨论】:
Lambda 是“更方便的方式” 在operator()
中重命名apply
可能只允许通过*this
而不绑定。
【参考方案1】:
不是直接的,因为成员函数有一个“隐藏”参数,它是方法被“调用”的对象。
所以当你写的时候:
Multipler m;
m.apply(1.0);
真正发生的事情是 Multiplier::apply
使用两个参数调用:对象 m
(您可以使用关键字 this
引用)和双 x
。
transform
想要一个可以用单个参数调用的东西,而Multiplier::apply
不是这样。
mem_fun
等允许您通过提前提供对象来创建可使用单个参数调用的函数对象。
【讨论】:
以上是关于是否可以直接将依赖于实例的成员函数(方法)从另一个成员函数传递给 STL 的算法?的主要内容,如果未能解决你的问题,请参考以下文章