从地图传递通用模板参数?

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 未绑定到回调,因此我们显式传递它。