我有以下代码:
#include <iostream>
using namespace std;
class A
{
int m_value;
public:
A(int value)
{
m_value = value;
funcA(&A::param);
}
void funcA(void (A::*function)(int))
{
(this->*function)(m_value);
}
void param(int i)
{
cout << "i = " << i << endl;
}
};
int main()
{
A ob(10);
return 0;
}
我有一个类,我在其中调用一个接收另一个函数作为参数的函数。函数调用位于行funcA(&A::param)
。我想要的是能够将函数作为参数传递而无需指定类范围:funcA(¶m)
。另外我不想使用typedef
这就是为什么我的代码有点'脏'。
有可能实现这个目标吗?
答案 0 :(得分:0)
这有点难看。
您应该首先考虑的是重新编码以使用继承和动态调度。要执行此操作,请将A类更改为具有funcA调用的虚拟方法
class A {
...
void funcA () {
custom_function(m_value);
}
protected:
virtual void custom_function (int)=0;
}
现在,对于您要使用的每个不同的custom_function,您声明一个从A派生的新类,并在那里实现该函数。它将自动从funcA调用:
class A_print : public A {
public:
virtual void custom_function (int param) {
std::cout << "param was " << param << std::endl;
}
}
如果这对你来说不够灵活,那么下一个最好的C ++解决方案就是实现一个functor(一个充当函数的对象,甚至可能覆盖()
运算符。
答案 1 :(得分:0)
这不可能。必须使用类作用域(A :: function)
来标识类中的函数指针答案 2 :(得分:-1)
我不明白为什么你不能这样做:
#include <iostream>
using namespace std;
class A
{
int m_value;
public:
A(int value)
{
param(value);
}
void param(int i)
{
cout << "i = " << i << endl;
}
};
int main()
{
A ob(10);
return 0;
}