C++ 是否从映射传递通用模板参数?
我是从c#来的,所以请原谅我在问这个问题时可能会出错 我创建了一个映射,其中包含一个字符串和一个方法,用于处理通过字符串调用方法:C++ 是否从映射传递通用模板参数?,c++,dictionary,generics,invoke,C++,Dictionary,Generics,Invoke,我是从c#来的,所以请原谅我在问这个问题时可能会出错 我创建了一个映射,其中包含一个字符串和一个方法,用于处理通过字符串调用方法: //MyClass.h void SerializeCustomData(); std::unordered_map<std::string, void(MyClass::*)()> functionMap; MyMethod() { functionMap["SerializeCustomData"] = &MyClass::Seri
//MyClass.h
void SerializeCustomData();
std::unordered_map<std::string, void(MyClass::*)()> functionMap;
MyMethod() {
functionMap["SerializeCustomData"] = &MyClass::SerializeCustomData;
};
#包括
#包括
#包括
类MyClass
{
std::无序_图功能图;
公众:
void MyMethod()
{
emplace(“SerializeCustomData”,&MyClass::SerializeCustomData);
}
void CallSerialize()
{
functionMap.at(“SerializeCustomData”)(*此“参数”);
}
void序列化自定义数据(std::string s)
{
std::我能推荐使用std::function
而不是一般的成员函数指针吗?你是在寻找这些参数的容器吗?我是的,试着使用std::function和std::bind。@mileniumbug谢谢,所以在我的脑海里看起来是这样的:std::无序的映射函数映射;
你的问题有点奇怪李尔:你打算如何从映射中调用函数?你是绑定到MyClass
的实例,还是打算在它们上调用函数?@milleniumbug,目前我是如何从映射中调用函数的:if(functionMap.find(CommandArgument)!=functionMap.end()(this->*(functionMap[CommandArgument])()
我的问题可能不清楚,因为我不知道我打算如何以其他方式调用函数,尤其是使用参数……就像我们这里的鸡蛋交易之前的鸡一样。
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();
}