【发布时间】:2019-07-13 15:52:08
【问题描述】:
我学会了如何将成员函数作为函数指针参数传递给另一个成员函数。
现在,我正在尝试将 lamda 作为成员函数的函数指针参数传递。
我的代码:
#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 (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;
cout << myFunc([](int a, int b) {return a * b;}, 5, 3) << endl; //ERROR!!!
}
};
int main()
{
Test test;
test.setup();
}
结果:
错误: : 无法从 lambda 转换为 'Test::funcPtr' (aka 'int (测试::*)(int, int)')
预期结果:
8
2
15
我应该如何更正我的代码以获得预期的结果?
【问题讨论】:
-
你的函数接受一个指向成员函数的指针。
add和sub是成员函数,lambda 不是。 -
你不能。 C++ 不能以这种方式工作。
-
那么如果没有实际的
mult()函数就不能将乘法函数传递给myFunc吗? -
为什么
myFunc以member 函数指针开头?您可以使用常规函数指针,并将add和sub设为静态。 -
@ZackLee 我对我的回答进行了修改,您可能想尝试一下。