类成员函数的函数指针

3

我需要帮助,使用一个函数指针来调用另一个类中的方法,但我不确定如何使它能够调用任何类方法。

代码可能是错误的,因为我对它的工作原理感到非常困惑,但希望这段代码片段能够解释我想要实现的功能。

#ifndef BUTTON_INPUT_HPP
#define BUTTON_INPUT_HPP

#include"../InputComponent.hpp"

class ButtonInput : public InputComponent {
public:
    template<typename C>
                            ButtonInput(void(C::*f)(), C* object);
    virtual void            update(World& world, GraphicsComponent& graphics, Actor& actor);
private:
    void (C::*func)();
};

#endif

更新函数检查按钮是否被点击,如果是,则应调用func()。

我建议不要使用普通函数指针,而是使用std::function和std::bind。 - Zharf
能否传递一个按钮类型,而不是模板? - Chris L
你可以查看设计模式:观察者模式 - Jarod42
1个回答

1
这是一个简单的示例,展示如何存储成员函数的函数指针以及实例的指针。存储的函数可以在以后使用call()调用。
#include <iostream>

template<typename C>
class FuncHolder {
public:
    FuncHolder(void (C::*f)(), C* object) : func(f), c(object) {}
    void call() { (c->*func)(); } // Make the call.
private:
    void (C::*func)(); // Pointer to member function.
    C* c;              // Pointer to object.
};

// Example class with member function.
struct Foo {
    void test() { std::cout << "Foo" << std::endl; }
};

int main() {
    Foo foo;
    FuncHolder<Foo> f(&Foo::test, &foo);

    f.call();
}

这就是我想的,但我无法让它工作,一定是哪里犯了错误。谢谢! - Eldhom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接