gpt4 book ai didi

c++ - 如何正确地将成员函数作为参数传递

转载 作者:行者123 更新时间:2023-11-30 01:34:02 25 4
gpt4 key购买 nike

如何正确地将成员函数作为参数传递?

我的代码:

#include <iostream>

using namespace std;

class Test
{
public:
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
typedef int (*funcPtr)(int a, int b);
int myFunc(funcPtr func, int a, int b)
{
return func(a, b);
}
void setup()
{
cout << myFunc(&Test::add, 5, 3) << endl;
cout << myFunc(&Test::sub, 5, 3) << endl;
}
};

int main()
{
Test test;
test.setup();
}

结果:

Error: Cannot initialize a parameter of type 'Test::funcPtr' (aka 'int ()(int, int)') with an rvalue of type 'int (Test::)(int, int)'

预期结果:

8
2

最佳答案

您的方法应该是“常规”函数。向它们添加 static 以允许将它们与函数指针一起使用:

class Test
{
public:
static int add(int a, int b)
{
return a + b;
}
static int sub(int a, int b)
{
return a - b;
}
// ...
};

如果你真的指向方法,你应该用 int (Test::*funcPtr)(int a, int b) 替换 int (*funcPtr)(int a, int b) ) 并改用类似的东西:

class Test
{
public:
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
typedef int (Test::*funcPtr)(int a, int b);
int myFunc(funcPtr func, int a, int b)
{
return (this->*func)(a, b);
}
void setup()
{
cout << myFunc(&Test::add, 5, 3) << endl;
cout << myFunc(&Test::sub, 5, 3) << endl;
}
};

关于c++ - 如何正确地将成员函数作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57020174/

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