【发布时间】:2017-03-01 23:38:47
【问题描述】:
我已经看到了许多示例,如何使函数指针指向 特定 类类型的 C++ 类非静态成员。但是,我会使用这种适用于 any 类型类的指针。为了演示这个想法,我写了一个伪示例:
class A
{
public:
A(){} //constructor
void callMe() { /* do something */ }
};
class B
{
public:
B(){} //constructor
void callMe() { /* do something */ }
};
main()
{
A aa;
B bb;
//pseudo part:
generic_method_pointer_type p; //how to define the type of p?
p=HOWTO;//set pointer p to point to A::callMe. How to do?
p(aa); //A::callMe on instance aa gets called
p=HOWTO;//set pointer p to point to B::callMe. How to do?
p(bb); //B::callMe on instance bb gets called
}
这看起来可能吗?
我知道 C++11 对此有新的技巧,例如 std::function。我在 std::function 上做了一些实验,发现它对于在小型微控制器上运行的实时应用程序来说太慢了。这就是为什么我更喜欢直接硬编码的指针,这会导致最小的开销。
感谢您的建议!
【问题讨论】:
-
您是否阅读了您提供的标签下的帖子,特别是在成员函数指针下?
-
在网上搜索了几个小时。如果您知道答案的链接,我将不胜感激。
-
如果您设置
p=&A::callMe;然后执行p(bb);,您期望会发生什么? -
您需要知道哪种
this才能调用该方法,这会使您陷入困境。如果你想要一个可以保存任何东西的通用函数指针,这是可以做到的,但是所有类型安全都会消失。除非您非常出色并且非常非常小心,否则您的程序将成为等待发生的意外。您是否考虑过放弃异常宽泛的“amy”,让您真正需要解决问题的所有类扩展一个定义函数接口的纯虚拟基类? -
@aschepler 可能不会有任何好处,但不是问题,因为它很容易避免。
标签: c++ callback function-pointers member-function-pointers