从地图传递通用模板参数?
Passing a generic template parameter from a map?
我来自 C#,所以请原谅我在尝试提出这个问题时可能犯的任何错误。
我创建了一个包含字符串和处理通过字符串调用方法的方法的映射:
//MyClass.h
void SerializeCustomData();
std::unordered_map<std::string, void(MyClass::*)()> functionMap;
MyMethod() {
functionMap["SerializeCustomData"] = &MyClass::SerializeCustomData;
};
我的问题是;我怎样才能让我的地图接受方法的参数? C++ 中的泛型类型或字符串?
示例:
SerializeCustomData(std::string);
#include <functional>
#include <iostream>
#include <unordered_map>
class MyClass
{
std::unordered_map<std::string, std::function<void(MyClass&, std::string)>> functionMap;
public:
void MyMethod()
{
functionMap.emplace("SerializeCustomData", &MyClass::SerializeCustomData);
}
void CallSerialize()
{
functionMap.at("SerializeCustomData")(*this, "argument");
}
void SerializeCustomData(std::string s)
{
std::cout << "hello: " << s << "\n";
}
};
int main()
{
MyClass c;
c.MyMethod();
c.CallSerialize();
}
此处使用 MyClass&
参数和字符串调用地图中的函数。请注意 MyClass
未绑定到回调,因此我们显式传递它。
我来自 C#,所以请原谅我在尝试提出这个问题时可能犯的任何错误。
我创建了一个包含字符串和处理通过字符串调用方法的方法的映射:
//MyClass.h
void SerializeCustomData();
std::unordered_map<std::string, void(MyClass::*)()> functionMap;
MyMethod() {
functionMap["SerializeCustomData"] = &MyClass::SerializeCustomData;
};
我的问题是;我怎样才能让我的地图接受方法的参数? C++ 中的泛型类型或字符串?
示例:
SerializeCustomData(std::string);
#include <functional>
#include <iostream>
#include <unordered_map>
class MyClass
{
std::unordered_map<std::string, std::function<void(MyClass&, std::string)>> functionMap;
public:
void MyMethod()
{
functionMap.emplace("SerializeCustomData", &MyClass::SerializeCustomData);
}
void CallSerialize()
{
functionMap.at("SerializeCustomData")(*this, "argument");
}
void SerializeCustomData(std::string s)
{
std::cout << "hello: " << s << "\n";
}
};
int main()
{
MyClass c;
c.MyMethod();
c.CallSerialize();
}
此处使用 MyClass&
参数和字符串调用地图中的函数。请注意 MyClass
未绑定到回调,因此我们显式传递它。