嘿,以某种方式可以将函数指针作为来自任何其他类的参数吗?
我想要一个带有地图的类,它存储来自另一个类的函数指针。
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);
}
我已经尝试过使用模板,但我认为我没有正确使用它们。 有谁可以帮助我?
答案 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;
}
};