我对仿函数非常陌生,我必须为API创建一个使用函数作为参数的方法。 所以,在我的标题中,我已经完成了:
typedef void(*target_function)(std::string client_ip);
void my_method(std::string path_name, std::function<target_function> a_function);
在我的cpp中,我试过这种方式:
void my_class:: my_method(std::string path_name, std::function<target_function> )
{
///
}
但它不会编译。
我对此非常困惑......你能帮我解决一下吗?
编辑: 它开玩笑了! 谢谢,大家,非常快速的回答!
答案 0 :(得分:6)
@ Cheers-and-hth-alf是对的。但我更喜欢这个:
typedef std::function<void (std::string)> TTargetFunc;
void my_method(std::string path_name, TTargetFunc a_function);
答案 1 :(得分:4)
尝试
typedef void target_function(std::string client_ip);
因为std::function
将函数类型作为模板参数,而不是函数指针类型。
答案 2 :(得分:0)
首先删除空格并添加函数名称参数名称,如下所示:
void my_class::my_method(std::string path_name, std::function<target_function> a_function)
{
///
}
此外,您应该将其声明为std::function<void(std::string)>
。 typedef是杂乱的(imo)。