将函数对象作为函数参数传递

时间:2017-12-23 19:48:02

标签: c++ c++11

我想简单地将初始化的函数对象以多种方式传递给我自己的函数。

我没有找到任何带有" for_each"但据我所知,它应该以同样的方式工作。

void    f(int& n, void (*g)(int& m) ){ g(n);};

class TEST{
public:
    int init=0;
    TEST(int _init):init(_init){}
    void    operator() (int& m) {m+=init;}

};

int main(int argc, char *argv[])
{
    int k, m;
    cin >> k >> m;

    TEST    mytest(m); // OK, creates object with initialization
    mytest(m);         // OK, using initialized object's "operator()"

    f(k,mytest);       //  error: cannot convert 'TEST' to
                       //  'void (*)(int&)' for argument '2'to
                       //  'void f(int&, void (*)(int&))'

    f(k,TEST(m));      //  error: cannot convert 'TEST' to
                       //  'void (*)(int&)' for argument '2'to
                       //  'void f(int&, void (*)(int&))'

    return 0;
}

1 个答案:

答案 0 :(得分:4)

TEST类型的函数指针与int&的实例之间的共同点是什么?

可以使用template <typename Callable> void f(int& n, Callable c ) { c(n); } 类型的参数调用它们。

有什么区别?

它们是两种不同的类型。除非您使用功能模板,否则它们不能互换使用。

因此,您的解决方案是使用功能模板。

Makefile