c++ - 来自任何类的 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 来构建其他东西。
但是,由于我在编译时不知道该类,因此链接的答案将无助于解决我的问题。
解决方案
推荐阅读
- java - 如何强制 lambda 类型为特定类型?
- crystal-reports - Crystal Reports 2016:新字段限制记录返回
- sql - SQL 仅从当月选择记录
- javascript - 聚合物 3.0 数据绑定
- visual-studio-2017 - 将 Nuget 从 packages.config 迁移到 PackageReference - 传递依赖被反转
- jquery - 检查 JSON 数据时简化 ajax 函数
- python - 在 webdriver 单击后获取 RemoteDisconnected("Remote end closed connection without"
- python - 即使在正确的环境中,VS Code 也无法识别 Anaconda pkgs/libs
- ios - IOS/Objective-C:排除空值
- c# - 如何找到在 CheckBoxList 中检查的项目exaclty