我在尝试将一个函数作为另一个对象的函数参数传递时遇到了问题。我知道有很多类似的话题,但是要么无法使它们的解决方案起作用,要么无法理解它们。
class foo
{
public:
void func1(void (*Drawing)(void));
template<class T>
void func2(void (T::*Drawing)(void));
};
class bar
{
private:
foo myFoo;
void Drawing();
void func3() {
// Attempt 1
myFoo.func1(Drawing);
// Attempt 2
myFoo.func2<bar>(&bar::Drawing);
}
};
我的第一次尝试中,出现了错误,无法将
void (bar::*)(void)
转换为void (*)(void)
,后来我发现有普通函数指针和成员函数指针的区别。我的第二次尝试是为了克服这个问题,但现在出现了未解决的外部引用错误...
那么我如何成功地将我的
Drawing()
成员函数从另一个对象传递到另一个函数中去呢?
foo
中如何使用&bar::Drawing
,因为它是一个私有成员函数。即使给出成员指针,编译器也不允许你调用它。无论如何,你都需要一个实例来调用它,所以你需要将*this
传递给该函数。 - Austin Mullinsbar
中是可用的,访问控制只保护名称。而且它在foo::func2
中有不同的名称。想象一下如果它像你描述的那样工作 - 你甚至不能返回私有成员变量的引用。 - milleniumbug