示例:
std::function<void(int,int&)> addf=[&sum](int x,int& y){sum += x;sum+=y;cout<<"added:"<<x<<"added:"<<y<<endl;};
Talg::Call_repeat(addf,1,2, 3,4, 5,6); //通过
//且等效于addf(1,2),addf(3,4),addf(5,6)
Talg::Call_repeat(
[&sum](int x,int& y){sum += x;sum+=y;cout<<"added:"<<x<<"added:"<<y<<endl;},
1,2, 3,4, 5,6 );//失败了,如何让它通过呢?
实现的关键是检测函数的参数个数
对于普通函数还好办,但对lambda我是彻底拙计了。
std::function<void(int,int&)> addf=[&sum](int x,int& y){sum += x;sum+=y;cout<<"added:"<<x<<"added:"<<y<<endl;};
Talg::Call_repeat(addf,1,2, 3,4, 5,6); //通过
//且等效于addf(1,2),addf(3,4),addf(5,6)
Talg::Call_repeat(
[&sum](int x,int& y){sum += x;sum+=y;cout<<"added:"<<x<<"added:"<<y<<endl;},
1,2, 3,4, 5,6 );//失败了,如何让它通过呢?
实现的关键是检测函数的参数个数
对于普通函数还好办,但对lambda我是彻底拙计了。