将C++成员函数指针传递给STL算法

cco*_*r83 5 c++ stl member-functions stl-algorithm

我有一个成员函数如下:

class XYZ{
public:
    float function(float x);
private:
    float m_DensityMin;
    float m_DensityMax;
};
Run Code Online (Sandbox Code Playgroud)

现在,我试图通过传递成员函数并将结果值存储在向量中std::vector<float> foo来使用std::transformSTL算法转换a .functionbar

如果我将函数用作全局函数,使用应该表示类的成员变量的随机数据,它可以正常工作.

但是,由于函数需要使用成员变量m_DensityMinm_DensityMax类,我需要将它用作成员函数.这就是我尝试过的:

std::transform(foo.begin(), foo.end(), bar.begin(), &XYZ::function);
Run Code Online (Sandbox Code Playgroud)

但我最终得到VS2010中的错误:

error C2065: term does not evaluate to a function taking 1 arguments
Run Code Online (Sandbox Code Playgroud)

据我所知,我只传了一个论点.有什么指针吗?这是一个类似的问题,我尝试过使用std :: mem_fun,因为std :: mem_fn对我来说无法使用,但无济于事.

Pio*_*cki 7

std::mem_fun它本身只为成员函数提供了一个包装器,因此将在传递给它的第一个参数的上下文中调用一个operator().话虽如此,您需要绑定适当的实例,XYZ然后将函数对象传递给std::transform算法:

XYZ xyz;

std::transform(foo.begin(), foo.end(),
               std::back_inserter(bar),
               std::bind1st(std::mem_fun(&XYZ::function), &xyz));
//                  ~~~~~~^      ~~~~~~^                  ~~~^
Run Code Online (Sandbox Code Playgroud)

DEMO