【发布时间】:2017-03-30 19:56:05
【问题描述】:
对于模板函数的函数参数,我发现自己经常将成员函数包装在 lambda 中以创建相同的独立函数,其中第一个参数是对象。
一个(虚拟)示例:
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 aaaaaa 我刚刚在撰写答案时重新发明了
std::mem_fn。太好了。
标签: c++ c++11 lambda word-wrap member-functions