说我有一个功能:
void function() {
cout << "Hello!" << endl;
}
我有一个算法调用一个函数并传递两个参数:
template <class F>
void my_algorithm(F f) {
// ...
f(x, y);
// ...
}
如何通过操作函数或函数对象将function
传递给my_algorithm
,而无需手动创建包装器?作为参考,我不想创建的包装器看起来像这样:
void functionSkipArgs(A a, B b) {
function();
}
换句话说,我想在以下代码中找到与some_operations
对应的函数或一系列函数:
my_algorithm(some_operations(&function));
答案 0 :(得分:5)
这似乎有效:http://ideone.com/6DgbA6
#include <iostream>
#include <functional>
using namespace std;
void func() {
cout << "Hello!" << endl;
}
template<class F>
void my_algorithm(F f) {
int x = 100;
int y = 200;
f(x, y);
}
int main() {
my_algorithm(std::bind(func));
return 0;
}
答案 1 :(得分:3)
在标记了您的问题的c ++ 11中,使用lambda。 这是代码:
my_algorithm([](A, B)
{
return function();
});
lambda为你做的是它为你创造的包装器。
如果你想要通用(模板化)并且你有c ++ 14,那么你可以使用auto:
my_algorithm([](auto, auto)
{
return function();
});
答案 2 :(得分:0)
使用std::function
和lambda:
#include <iostream>
#include<functional>
void function() {
std::cout << "Hello!" << std::endl;
}
template <typename F>
void my_algorithm(F f) {
int x=0;
int y=10;
f(x, y);
}
int main()
{
std::function<void(int,int)> fun= [](int x, int y){ function();};
my_algorithm(fun);
}