【发布时间】:2010-12-01 22:35:21
【问题描述】:
如何获取类成员函数的函数指针,然后用特定对象调用该成员函数?我想写:
class Dog : Animal
{
Dog ();
void bark ();
}
…
Dog* pDog = new Dog ();
BarkFunction pBark = &Dog::bark;
(*pBark) (pDog);
…
另外,如果可能的话,我还想通过指针调用构造函数:
NewAnimalFunction pNew = &Dog::Dog;
Animal* pAnimal = (*pNew)();
这可能吗?如果可以,最好的方法是什么?
【问题讨论】:
-
我还是不太明白'为什么'如果你想调用一个对象的成员函数然后简单地传递一个指向对象的指针?如果人们抱怨因为它使您能够更好地封装类,为什么不创建一个所有类都继承自的接口类?
-
虽然很多人会使用 boost::function 来隐藏原始成员指针机制,但它在实现命令模式之类的东西时很有用。
-
为什么动态分配那条狗?然后,您也必须手动删除该对象。这看起来很像您来自 Java、C# 或其他类似的语言,但仍在使用 C++。一个普通的自动对象 (
Dog dog;) 更有可能是您想要的。 -
@Chad:我基本同意,但有时传递参考的成本会更高。考虑一个在某种类型的数据(解析、计算等)上迭代的循环,而不是能够基于某些 if/else 计算调用函数会带来成本,其中仅调用指向的函数可以避免这种 if/then /else 检查是否可以在进入循环之前完成这些检查。
标签: c++ function-pointers class-method