C++ 如何使用<;跳过参数;功能性>;在C++;11/98
假设我有一个函数:C++ 如何使用<;跳过参数;功能性>;在C++;11/98,c++,c++11,c++98,C++,C++11,C++98,假设我有一个函数: void function() { cout << "Hello!" << endl; } 换句话说,我想在下面的代码中找到与某些\u操作相对应的函数或函数系列: my_algorithm(some_operations(&function)); 这似乎有效: #包括 #包括 使用名称空间std; void func(){ cout在c++11中,使用。 代码如下: my_algorithm([](A, B) { ret
void function() {
cout << "Hello!" << endl;
}
换句话说,我想在下面的代码中找到与某些\u操作相对应的函数或函数系列:
my_algorithm(some_operations(&function));
这似乎有效:
#包括
#包括
使用名称空间std;
void func(){
cout在c++11中,使用。
代码如下:
my_algorithm([](A, B)
{
return function();
});
lambda为您所做的是为您的应用程序创建包装器
如果您希望它是通用的(模板化的),并且您有c++14,那么您可以使用auto:
my_algorithm([](auto, auto)
{
return function();
});
使用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);
}
#包括
#包括
空函数(){
std::他是否将其标记为c++11,在c++11中,lambada通常更倾向于绑定,并且可读性更强。确实如此,但我并没有想到一个lambda解决方案会更好。我的想法是,他只是不想“包装”毫无疑问,有更好的解决方案,lambda就是其中之一。Bind创建了一个函数包装器。@AndresRiofrio,boost::Bind
在这样一个简单的转发情况下,我更喜欢绑定到lambda。这增加了std::function的额外复杂性
my_algorithm([](A, B)
{
return function();
});
my_algorithm([](auto, auto)
{
return function();
});
#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);
}