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

时间:2015-05-05 11:16:33

标签: c++ function-pointers

嘿,以某种方式可以将函数指针作为来自任何其他类的参数吗?

我想要一个带有地图的类,它存储来自另一个类的函数指针。

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

现在我将函数指针存储在同一个类中。但是MyMethod应该让它自己的类从任何类获取函数指针(但是一个带有Map的实例只接受来自同一个类的函数指针,如obj1只有来自class1的funcptrs,obj2只包含来自class2的函数等),

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);
}

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

1 个答案:

答案 0 :(得分:0)

是的,使用模板:

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;
    }
};