如何在C ++ 11/98

时间:2015-07-15 23:31:12

标签: c++ c++11 c++98

说我有一个功能:

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

3 个答案:

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