C++ std::function的用法

我想实现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)>" 的适当构造函数

请问这是为什么啊~

3个回答

把模板返回类型改成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){
    /*………………*/
}
lgj123xj
猿长大人 解决了!谢谢!
2 年多之前 回复

把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);
}

lgj123xj
猿长大人 还是不可以啊,我是不是编译错误,是IDE提示的语法错误
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问