对于模板函数的函数参数,我发现自己经常在lambda中包装成员函数以创建相同的独立函数,第一个参数是对象。C++如何将成员函数一般转换为独立函数(用作函数参数)?
A(虚设)例如:
class A
{
public:
double f1() const;
double f2(int i) const;
// some data
};
template <typename Func>
double calculateSum(std::vector<A> as, Func f)
{
double result = 0.0;
for (auto a : as)
result += f(a);
return result;
}
int main()
{
std::vector<A> as;
int i = 0;
auto sum1 = calculateSum(as, [](const A& a) { return a.f1(); });
auto sum2 = calculateSum(as, [&i](const A& a) { return a.f2(i); });
return 0;
}
有一种方法,以更一般定义这样的lambda?或者有没有办法直接引用成员函数而不是使用lambdas?
具有成员函数的'std :: function'以您在问题中解释的方式工作(但不以您的代码与'f2'工作的方式)。不知道这是否更通用,因为你仍然需要在专业化中指定函数类型。 –
你可能也想看看'std :: mem_fn' – happydave
@happydave aaaaaaand我刚刚在编写我的答案时重新创建了'std :: mem_fn'。大。 – Quentin