gpt4 book ai didi

c++将数据源函数作为参数传递

转载 作者:太空狗 更新时间:2023-10-29 20:21:59 25 4
gpt4 key购买 nike

我有一个静态函数:

void E::createEP(std::list<double>* ret, double length, double (*getHeight)(double)) {
// magic
double sampleIntervall = //from magic

double dist = 0;
while (length - dist > -0.1) {
ret->push_back(dist, (*getHeight)(dist));
dist += sampleIntervall;
}
}

在不同的调用中,我有两个不同的函数作为 getHeight() 传递:

  • 数据库包装类中的非静态函数
  • createEP()(用于“重新创建”不同参数)相同的 E 对象中的函数,需要访问元素字段,因此不能要么是静态的。

是否可以通过某种方式将非静态函数作为参数传递给静态函数?

如果不是,最优雅的选择是什么?我不想在 createEP() 中复制整个代码。

最佳答案

您可以使用的是 std::function .它将可调用类型包装为函数、成员函数、具有重载函数运算符的对象。您只需提供要使用的签名。所以在你的情况下你会有

void E::createEP(std::list<double>* ret, double length, std::function<double(double)> getHeight) 

然后将成员函数与您要调用它的对象绑定(bind),您可以使用 lambda喜欢

[&](double val){ return object.FunctionName(val); }

std::bind喜欢

std::bind(&ClassName::FunctionName, &object)

关于c++将数据源函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40022763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com