来自任何类的功能指针参数

Function Pointer parameter from any class

本文关键字:指针 参数 功能 任何类      更新时间:2023-10-16

我想在地图上上课,该课程存储了另一个类的功能指针。

void MyClass::MyMethod((AnyClass::*func)())
{
  //add to container
}

现在,我正在将功能指针存储在同一类中。但是MyMethod应该拥有自己的类,从任何类中获取功能指针(但是使用地图的一个实例只能从同一类中获取函数指针,例如OBJ1仅具有Class1的funcptr,OBJ2仅包含Class2等的funcptrs),

),
typedef void (MyClass::*func_ptr(float delta);
void MyClass::MyMethod(const std::string& id, func_ptr func)
{
    std::pair<std::string,func_ptr> state_pair (id,func);
    state_map_.insert(state_pair);
}

我已经使用了模板尝试过,但是我认为我没有正确使用它们。谁能帮我?

是的,使用模板:

template <typename Ret, class T, typename... Args>
void MyClass::MyMethod(Ret (T::*func) (Args...))
{  }

将它们存储在容器中的方式取决于您是否仅添加具有相同签名的功能。您可以像这样的模板MyClass模板,并创建一个用于存储一个签名的成员函数的容器。否则,您可以创建包装器函数。

编辑:

如果我正确理解您,则需要一个模板的MyClass,该模板将从字符串到成员函数的地图和成员函数MyMethod存储在该地图中?这样的东西:

template <typename T>
struct MyClass
{
    std::map<std::string, void(T::*)(float)> m_map;
    void MyMethod(const std::string &id, void (T::*func) (float))
    {
        m_map[id] = func;
    }
};