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);
}