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

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条)

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制