来自任何 class 的函数指针参数

Function Pointer parameter from any class

嘿,有没有可能从任何其他 class 获取函数指针作为参数?

我想要 class 和一个映射,它存储来自另一个 class 的函数指针。

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

现在我将函数指针存储在同一个 class 中。但是 MyMethod 应该有它自己的 class 从任何 class 获取函数指针(但是一个带有 Map 的实例只会从同一个 class 获取函数指针,就像 obj1 只有来自 [=21] 的 funcptrs =]1, 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;
    }
};