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

时间:2017-01-30 18:26:49

标签: c++ dictionary generics invoke

我来自c#所以请原谅我在试图提出这个问题时可能出错的事。

我创建了一个包含字符串的地图和一个处理字符串调用方法的方法:

//MyClass.h
void SerializeCustomData();
std::unordered_map<std::string, void(MyClass::*)()> functionMap;

MyMethod() {
    functionMap["SerializeCustomData"] = &MyClass::SerializeCustomData;
};

我的问题是;如何让我的地图采用该方法的参数? c ++中的泛型类型还是字符串?

示例:

SerializeCustomData(std::string);

1 个答案:

答案 0 :(得分:0)

#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&参数和字符串调用map中的函数。请注意,MyClass未绑定到回调,因此我们明确地传递它。