来自任何 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;
}
};
嘿,有没有可能从任何其他 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;
}
};