c++ - 在基类中存储指向派生类函数的指针
问题描述
我想创建一个方法,它将指向对象schedule_function
成员函数的指针保存到 a 中,但没有在的父类中定义所述函数,. 现在我正在使用这种方法,它可以很好地保存函数,但不适用于函数:BasicAlgo
ScheduledEvent
BasicAlgo
Strategy
Strategy
BasicAlgo
class Strategy {
schedule_function(void (Strategy::*func)()) {
// Puts the scheduled event built with the strategy function onto a list
heap_eventlist.emplace_back(std::make_unique<events::ScheduledEvent>(func));
}}
我尝试替换Strategy::*func
为,Strategy*::*func
但这会导致编译器错误,并且似乎不正确。
有没有办法将派生类的成员函数的指针作为基类中BaseAlgo
的参数,而不在中定义函数?Strategy
Strategy
解决方案
您无法将成员函数存储BaseAlgo
在指向成员函数的指针中Strategy
。
您可以将 的成员函数存储BaseAlgo
在指向 的成员函数的指针中BaseAlgo
,并且可以将此类指针类型与 CRTP 一起使用:
template<class T>
struct Strategy {
void schedule_function(void (T::*func)());
};
struct BasicAlgo : Strategy<BasicAlgo> {
void memfun();
};
int main() {
BasicAlgo b;
b.schedule_function(&BasicAlgo::memfun);
}
否则,您可以使用类型擦除函数包装器std::function
代替函数指针。
推荐阅读
- java - 对象 Web,访问作为参数类值传递的类
- javascript - ReactJS:如何获取已更改的表行的数据
- android-kernel - ebtables.c:61:3:错误:函数“xt_compat_calc_jump”的隐式声明 [-Werror=implicit-function-declaration]
- excel - 如何将一个字符串与许多其他字符串进行比较?
- javascript - React Forms:根据 withFormik() 中的 Axios GET 调用响应更新 UI
- javascript - 如何在源代码中创建没有 HTML 的网站
- flutter - 如何在 Flutter 中使用集合 for 循环?
- python - 如何使用 Python获取 src 属性
- javascript - Redux reducer 被我的 React 组件中的 setState 或 .map() 覆盖
- python - Pandas:如何对多级 DataFrame 中的子级求和最大的 3 个值