从std :: map调用函数

时间:2016-08-23 22:37:24

标签: c++ casting function-pointers c++14

我试图构建User作为我的函数的处理程序。为了解释原因,我将使用它来扫描用户输入,检查地图是否匹配。如果找到匹配项,我将调用该函数并将用户输入的行的其余部分复制到该函数中;

Object

快速示例代码:

class Object
{
public:
    Object(std::map<std::string, void(*)(const std::string&)> MAP)
        {/*...code...*/};
};

两条注释行都没有工作,创建了不同的错误,但是其他行成功了,没有运行时错误(好吧,NULL会是,但我会处理它)。

我的问题是,我是否正确地想象了这种机制,如果没有,我应该只保存指针并稍后转换为函数吗?是否可以在一个仅在类范围内定义的对象中保存引用和调用函数(也可以从类内部调用)?

很多问题......我知道。但我以前从未见过这样做过......所以我猜可能有一个很好的理由。

因为我没有指定错误,here is a link;

1 个答案:

答案 0 :(得分:3)

static成员函数与非成员函数的不同之处在于它们采用了额外的隐式参数 - 类实例。 Main::testFunc需要两个参数:Mainstd::string const&。但是你的界面只允许一个参数。实现这项工作的唯一方法是创建一个函数可以引用的全局Main* - 这是一个非常脆弱的设计。

相反,您可以使用std::function<void(std::string const&)>使您的界面更通用。这是任何可调用的std::string const&,而不仅仅是指向函数的指针。这将允许您编写上一个版本:

{"test3", [this](const std::string &A){ testFunc(A); }},

并且可能是你最好的选择。