猿长大人 2017-11-29 08:35 采纳率: 33.3%
浏览 5027
已采纳

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条回答 默认 最新

  • Anthony_zhang 2017-11-29 13:14
    关注

    把模板返回类型改成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){
        /*………………*/
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?