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

请问这是为什么啊~

把模板返回类型改成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);
}