首页 > 解决方案 > 来自任何类的 c++ 函数对象/指针

问题描述

我正在研究一段核心代码,其中一个函数将存储在一个对象中,然后在需要时将被调用。到目前为止,我已经使用函数指针来构建它的初稿:

class caller {
int (*f)();
caller(int (*function)()){
f = function;
}
void timeIsRight(){
f();
}

caller(otherFunction);

这适用于从代码的其他区域调用函数,但是我希望能够处理将对象成员传递给调用者 IE:

caller(object.aFunction);

尽管我的编译器抱怨上述问题,这让我相信我正在接近这个错误(我尝试了其他一些编写上述内容的方法,但均无济于事。

我尝试将调用者移动到对象类中:

class object{
...
int myMember(){...}
caller(myMember);
...
}

虽然我收到错误int(namespace::object::*)() is incompatible with int(*)()这会告诉我我需要告诉调用者函数的来源。

现在理想情况下,我希望调用者能够接受任何返回 anint并且没有参数的函数,而不管它位于何处(命名空间、类等)

从我目前的阅读来看,我可以走的两条可能的路线是:

如果这些可以满足我的需要,我也愿意从函数指针切换到函数对象或 lamdas。

上述任何一种方法都能够得到我想要的结果吗?如果是这样,我将非常适合朝着正确的方向推进,因为我发现我的搜索范围很广,但没有多少有用的深度。

谢谢大家。

请注意,我采用与类/命名空间无关的方法,这是我的主要设计约束。如果函数指针无法实现这些,我很乐意转向对象,lamdas 来构建其他东西。

但是,由于我在编译时不知道该类,因此链接的答案将无助于解决我的问题。

标签: c++lambda

解决方案


推荐阅读