我想实现std::function定义的函数类型可以传递参数。
参数类型设置为void的时候,语法是没有错的:
typedef std::function<void(void)> TestFunc;
class Test{
public:
void setFunc(TestFunc f){ fn = f; }
private:
TestFunc fn;
};
void test(){
Test t;
t.setFunc(func);
}
void func(){
/*………………*/
}
有参数的时候会报语法错误:
typedef std::function<void(int,int)> TestFunc;
class Test{
public:
void setFunc(TestFunc f){ fn = f; }
private:
TestFunc fn;
};
void test(){
Test t;
t.setFunc(func);
}
void func(int i,int j){
/*………………*/
}
显示错误信息:不存在从 "void (int i, int j)" 转换到 "std::function<void (int i, int j)>" 的适当构造函数
请问这是为什么啊~
把模板返回类型改成bool或者其他类型,不要使用void就可以了,跟参数的类型没有关系,我改成了<bool(int, char, String)>
你看看
typedef std::function<bool(int, char, String)> TestFunc;
class Test{
public:
void setFunc(TestFunc f){ fn = f; }
private:
TestFunc fn;
};
void test(){
Test t;
t.setFunc(func);
}
bool func(int i, char c,String str){
/*………………*/
}
http://en.cppreference.com/w/cpp/utility/functional/function/function
构造函数只有这几种
把func函数的定义:
void func(int i, int j){
/*………………*/
}
调整到void test(){之前,就可以编译成功了。
也就是写成这样:
typedef std::function TestFunc;
class Test{
public:
void setFunc(TestFunc f){ fn = f; }
private:
TestFunc fn;
};
void func(int i, int j){
/*………………*/
}
void test(){
Test t;
t.setFunc(func);
}