我有一些课 - class1。它有一个成员函数fun1和fun2,它获取一个函数fun3作为参数的指针。 是否可以通过fun3传递的方式调用fun1(也是公共的)来从外部调用fun2(fun2是公共的)?
我的意思是这样的:
class class1
{
public:
void fun1();
void fun2( void(*fun3)() );
};
void fun3()
{
fun1();
}
class1 a;
a.fun2( &fun1 );
我知道上面的代码不会起作用,但也许可以用不同的方式来实现。
答案 0 :(得分:2)
是否可以通过
fun2
作为参数调用fun2
(也是公开的)传递的方式从外部(fun3
公开)调用fun1
?
当然,只要fun3
可以接受指向class1
类型的对象的指针/引用。
class class1
{
public:
void fun1() {}
// Change the function type that can be
// passed to fun2
void fun2( void(*f)(class1& obj) )
{
f(*this);
}
};
// Change fun3 to accept a reference to an object of type class1
void fun3(class1& obj)
{
obj.fun1();
}
int main()
{
class1 a;
a.fun2( &fun3 );
}