如何将另一个类的函数作为参数传递?

亚历克斯

我想将另一个类的函数作为参数传递给当前类。我正在尝试做这样的事情(我简化了代码,因此您仍然可以理解):

B class:

bool B::myCmpFunc(int a, int b) {
    return a > b;
}

vector<int> B::sort(bool (*cmp)(int a, int b)) {
    vector<int> elems = getElems();
    for (int i = 0; i < elems.size() - 1; i++) {
        for (int j = i + 1; j < elems.size(); j++) {
            if ((*cmp)(elems[i], elems[j])) {
                int aux = elems[i];
                elems[i] = elems[j];
                elems[j] = aux;
            }
        }
    }
    return elems;
}

我尝试从调用此排序函数A class

B b;
auto sortedElems = b.sort(&b.myCmpFunc);

问题是,当我尝试将&b.myCmpFunc作为参数传递给时,出现此错误A class

错误C2276'&':对绑定成员函数表达式的非法操作

我也尝试过其他的东西,比如传递函数为b.myCmpFunctB::myCmpFunc&B::myCmpFunc,但我仍然有错误。

卡米尔库克

当您有一个class函数(类中的非静态函数)时,您需要传递this该类的实例,以便编译器可以this在调用该函数时将对象的实例传递给该函数。

您可以:

  1. 发挥自己的作用staticstatic类中的函数不使用this/对象实例,因此它们的指针是正常的。

static bool B::myCmpFunc(int a, int b) {}
b.sort(&b.myCmpFunc);
// or
b.sort(&B::myCmpFunc);
  1. 您可以使用来重构函数以使用std::functionthis与对象指针绑定std::bind

vector<int> B::sort(std::function<bool(int a, int b)> cmp) {
        ... no changes ...
}
b.sort(std::bind(&B::myCmpFunc, &b, std::placeholders::_1, std::placeholders::_2));
  1. 重构您的函数以仅使用B类函数。

vector<int> B::sort(bool (B::*cmp)(int a, int b)) {
       ...
       (this->*cmp)(...);
       ...
}
b.sort(&B::myCmpFunc);
  1. 使用lambda。

b.sort([](int a, int b) -> bool { return a < b; });
// really or
b.sort([&b](int a, int b) -> bool { return b.myCmpFunc(a, b); });
  1. 还有更多(例如模板)。

由于成员函数B::myCmpFunc似乎并不使用this指针或对象成员,因此我将对其进行声明static

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将一个类的函数作为另一个类的另一个函数的参数传递

如何将参数传递给作为另一个函数参数的函数

如何将tanh函数作为参数传递给另一个函数?

如何将函数作为参数传递给 Javascript 中的另一个函数?

Kotlin:如何将函数作为参数传递给另一个函数?

如何将函数作为参数传递给另一个函数?

如何将泛型函数作为参数传递给另一个函数?

如何将一个函数作为参数传递给另一个函数?

如何将lambda从一个函数传递给另一个函数作为参数?

R-如何将一个函数作为参数传递给另一个函数?

如何将可变函数参数作为参数传递给另一个函数?

如何将暂停函数作为参数传递给另一个函数?Kotlin协程

如何将非静态成员函数作为模板参数传递给另一个成员函数?

在Rust中,我如何将发散函数作为参数传递给另一个函数

Python:如何将函数作为参数传递给另一个函数,而不自动运行它

如何将特定类的方法名称作为另一个方法的参数传递

如何将模板化类实例作为模板参数传递给另一个模板?

此函数如何将参数传递给另一个内部函数参数

如何将小部件构造函数作为参数传递给另一个小部件来构建

如何将mean()作为输入参数传递给Python中的另一个函数?

如何将参数从一个函数传递到另一个函数,但在php中的同一个类中

如何将另一个函数作为变量传递给R中的函数?

如何将回调作为参数传递给另一个函数

如何将参数传递给CDI中另一个类的注入类?

Python如何将类函数从实例传递到另一个类

Swift:如何将通用协议作为另一个协议的参数传递

如何将命令输出作为多个参数传递给另一个命令

如何将终端命令作为参数传递给另一个命令

如何将const参数从成员函数传递到另一个成员函数?