【发布时间】:2015-03-24 18:35:49
【问题描述】:
我在尝试将函数作为参数传递给另一个对象的函数时遇到问题。我很清楚有许多类似的主题,但我要么无法让他们的解决方案发挥作用,要么无法理解。
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) 的错误,然后我发现其中有正常的函数指针和成员函数指针。
尝试 2 是我克服这个问题的微弱尝试,但我现在得到了未解决的外部问题...
那么我怎样才能成功地将我的Drawing() 成员函数从另一个对象传递给另一个函数呢?
【问题讨论】:
-
使用函数对象,而不是函数指针。
-
您收到未解决的符号错误,因为您没有提供
func2的定义。 -
你能发布完整的链接器错误信息吗?
-
我不明白你应该如何在
foo中使用&bar::Drawing,因为它是一个私有成员函数。即使给定了指向成员的指针,编译器也不会让你调用它。无论如何,如果没有实例就无法调用它,因此您还需要将*this传递给函数。 -
@AustinMullins 可以在
bar使用,访问控制只保护名字。它在foo::func2中有不同的名称。想象一下,如果它像你描述的那样工作——你甚至不能返回对私有成员变量的引用。
标签: c++ function-pointers member-function-pointers member-functions