【发布时间】:2012-08-20 02:32:52
【问题描述】:
免责声明我不使用BOOST
或其他库
我终于了解了 PointerToMemberFunction 的工作原理。这是我的example code。
#include <iostream>
using namespace std;
class Foo
{
public:
void foo ( )
{
cout << "I'm a foo method\n";
};
};
class Bar
{
public:
void bar ( Foo* fooPtr , void(Foo::*fooFnPtr)() )
{
(fooPtr->*fooFnPtr)();
};
};
int main()
{
Foo* foo = new Foo();
Bar* bar = new Bar();
bar->bar ( foo , &Foo::foo );
return 0;
}
现在,问题是什么。 Bar::bar
必须以某种方式进行修改,因为在实际项目中它不会知道fooFnPtr
是指向哪个类的指针。换句话说,Bar::bar
必须适用于任何类,而不仅仅是 Foo
。我不知道,一个指向什么类的实例的指针被传递给Bar::bar
。
可以提供帮助的一件事是,与Bar::bar
一起工作的所有班级都是一个班级的孩子!
这可以实现吗?如何实现?如何修复我的代码?提前致谢!
【问题讨论】:
-
使用std::function作为实参,传递实参时使用std::bind将成员函数与对象指针/引用/值绑定。
-
这个问题有 10 亿次重复。
标签: c++ class pointers function-pointers iunknown