c++ - 在基类中存储指向派生类函数的指针

标签 c++ pointers inheritance polymorphism member

<分区>

我想创建一个方法 schedule_function 将指向 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 的成员函数指针作为参数 in 基类 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 之类的类型删除函数包装器来代替函数指针。

关于c++ - 在基类中存储指向派生类函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52769242/

相关文章:

c++ - 为什么 C++ 不允许继承友元?

c++ - 使用 ostream 和链接的运算符重载。为什么要通过引用返回?

c++ - 如何使变量始终等于某些计算的结果?

c++ - 为什么我不能用这个其他类的函数来填充这个类的函数指针

c++ - 为新文件类型重载 >> 运算符的优雅方法是什么?

c++ - 模板化类型定义和继承

c++ - 解析字符串对失败。恶灵 x3 语法

c++ - OpenCL 计算与顺序算法的输出不匹配

C++:从函数、返回类型或引用中使用和返回字符数组?

c - 取消引用和类型转换