我正在处理一段核心代码,其中一个函数将存储在一个对象中,然后在需要时稍后调用。到目前为止,我已经使用函数指针构建了它的初稿:
class caller {
int (*f)();
caller(int (*function)()){
f = function;
}
void timeIsRight(){
f();
}
caller(otherFunction);
这适用于从代码的其他区域调用函数,但是我希望能够处理将对象成员传递给调用者I.E:
caller(object.aFunction);
尽管我的编译器在抱怨以上内容,这使我相信自己正在犯错(我尝试了几种其他方法来编写以上内容,但无济于事。
我尝试将调用者移动到对象类中:
class object{
...
int myMember(){...}
caller(myMember);
...
}
尽管我收到错误int(namespace::object::*)() is incompatible with int(*)()
,但这告诉我我需要告诉调用者函数的来源。
现在,理想情况下,我希望调用者能够接受任何返回int
并且不带参数的函数,无论该函数位于何处(命名空间,类ect)
从到目前为止的阅读情况来看,我可能要走的两条路线是:
如果满足我的需求,我也愿意从函数指针切换到函数对象或lamda。
以上任何一种方法都能使我得到想要的结果,如果可以的话,我将非常适合向正确的方向推进,因为我发现我的搜索范围很广,而没有帮助的深度。
谢谢。
请注意,我遵循类/命名空间不可知方法,这是我的主要设计约束。如果使用函数指针无法实现这些目标,那么我很乐意转向对象,更不用说构建其他东西了。
但是,由于我在编译时不知道该类,所以链接的答案对解决我的问题没有帮助。