在C++中实现类似 python "map"函数的问题:调用类成员函数

Issue by implementing a python like "map" function in C++ : call a class member function

本文关键字:函数 问题 调用 成员 C++ map python 实现      更新时间:2023-10-16

我有一个函数成员:

double XC::nz(double z){
return pow(z/zrange_0,2)*exp(-pow(z/zrange_0,1.5));
}

我想得到等效的但矢量形式,所以我做了:

vector<double> XC::nz_vec(vector<double> input){
vector<double> output;
output.resize(input.size());
transform(input.begin(), input.end(), output.begin(), nz);
return output;
}

但是自从调用nz函数以来,编译不会传递,尤其是传入transform(input.begin(), input.end(), output.begin(), nz)

因此,我看到了一种替代方案,可能是:

transform(input.begin(), input.end(), output.begin(), this->*nz);

但编译器仍然抱怨。

在我的标题中,我把:

class XC{
...
public:    
double nz(double);
vector<double> nz_vec(vector<double>);
}

如何规避这个问题,因为我想在同一类的另一种方法中做:

int numPoints = 100000;
vector<double> nz_vec_min = nz_vec(linspace(zmin[0], zmin[1], numPoints));
vector<double> nz_vec_max = nz_vec(linspace(zmax[0], zmax[1], numPoints));

使用返回向量的 linspace(如在 Python 中(?

我可以-std=c++11或更早地设置编译器标志。

问题是nz是一个成员函数,因此需要在其关联的对象上调用。 最简单的方法是使用捕获 lambda:

std::transform(input.begin(), input.end(), output.begin(), [this] (double d) { return nz (d); });

另外,我建议您通过const引用而不是按值传递input,因为后者会复制。

现场演示