Search code examples
c++function-pointers

How to pass a generic function pointer as parameter


I have several functions that having similiar declarations:

int foo(int a);
int bar(int a);
int test(int a);

And the logics of my message handlers are exactly the same:

void HandleFoo(int a) {
    process(a);
    int ret = foo(a);
    if (ret) 
        print(a);
}

void HandleBar(int a) {
    process(a);
    int ret = bar(a);
    if (ret) 
        print(a);
}

void HandleTest(int a) {
    process(a);
    int ret = test(a);
    if (ret) 
        print(a);
}

So I am wondering if it is possible to write a general function:

void Handle(int a, func_pointer fn) {
    process(a);
    int ret = fn(a);
    if (ret) 
        print(a);
}

The fn is like a generic function pointer that can accept foo, bar and test

Is this possible?

Btw, currently no C++11 and boost in my project, only using TR1.


Solution

  • You can use a template

    Example (not your code exactly) :

    int add1(int n) { return n + 1; }
    int add2(int n) { return n + 2; }
    
    template<typename Adder>
    void AddHandler(int n, Adder adder)
    {
        int r = adder(n);
        std::cout << r << std::endl;
    }
    
    int main(void)
    {
        AddHandler(1, add1);
        AddHandler(3, add2);
    
        return 0;
    }
    

    This outputs as expected :

    2
    5
    

    You can see it live here http://ideone.com/q3FyI5