【发布时间】:2016-08-23 22:37:24
【问题描述】:
我正在尝试构建Object,它将作为我的函数的处理程序。为了解释原因,我将使用它来扫描用户输入,检查地图是否匹配。如果找到匹配项,我将调用该函数并将 user-inputed 行的其余部分复制到该函数;
class Object
{
public:
Object(std::map<std::string, void(*)(const std::string&)> MAP)
{/*...code...*/};
};
快速示例代码:
class Main
{
public:
void testFunc(const std::string& A)
{
}
void construct()
{
Object{
std::map<std::string, void(*)(const std::string&)> {
{"exit", [](const std::string &A){ exit(1); }},
//{"test1", (void(Main::*)(const std::string&))&testFunc},
//{"test2", [](const std::string &A){ testFunc(A); }},
//{"test3", [this](const std::string &A){ testFunc(A); }},
{"NULL", NULL}
}
};
}
};
注释的行都不起作用,产生了不同的错误,但其他行成功并且没有运行时错误(嗯,NULL 会是,但我正在处理)。
我的问题是,我是否正确地想象了这个机制,如果没有,我应该只保存指针并稍后转换为函数吗?是否可以在仅在类范围内定义的对象内保存引用和调用函数(也可以从类内部进行调用)?
很多问题.. 我知道。但我以前从未见过这样的做法。所以我想这可能是有充分理由的。
因为我没有指明错误,here is a link;
【问题讨论】:
-
考虑参考和
std::function -
testFunc的类型是void(Main::*)(std::string const&),而不是void(*)(std::string const&)——差别很大。 -
如果您可以将
testFunc声明为static,它将消除错误。 -
@ildjarn Opps,这是一个重写错误,已修复。
-
@areuz : 我不确定你在说什么你修好了......
标签: c++ casting function-pointers c++14