一种变体是仅使用 lambda:
class A
{
private:
double m_x, m_y;
public:
A(double x, double y): m_x {x}
{
m_y = extF(m_x, y, [&](double d){ return intF(d);});
}
double intF(double x) { return 2*x; }
};
另一种变体是使用 lambda 和std::mem_fn http://en.cppreference.com/w/cpp/utility/functional/mem_fn(省略类的其余代码):
A(double x, double y): m_x {x}
{
auto fn = std::mem_fn(&A::intF);
m_y = extF(m_x, y, [&](double d) {return fn(this, d);});
}
最后你可以摆脱 lambdas 如果你bind http://en.cppreference.com/w/cpp/utility/functional/bind成员函数指针的对象参数:
A(double x, double y): m_x {x}
{
auto fn1 = std::bind(std::mem_fn(&A::intF), this, std::placeholders::_1);
m_y = extF(m_x, y, fn1);
}
所有这些也适用于常量成员函数。