c++ - 将函数对象作为函数参数传递

标签 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;
}

最佳答案

void (*)(int& m) 类型的函数指针和 TEST 实例之间的共同点是什么?

它们可以用 int& 类型的参数调用。

有什么区别?

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

因此,您的解决方案是使用函数模板。

template <typename Callable>
void f(int& n, Callable c )
{
   c(n);
}

关于c++ - 将函数对象作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47955488/

相关文章:

c++ - 如何在 CMFCMenuBar 及其项目中支持辅助功能

c++ - 区别: std::make_unique<char>(size_t size) 和 std::make_unique<char[]>(size_t size)?

c++ 在 libconfig++::lookupValue() 中将类实例作为浮点变量传递

c++ - #include <../header.h> 在 C++ 中是一种不好的做法吗?

c++ - '列表迭代器不可取消引用'

c++ - 无法在 C++ 中初始化 char

c++ - clang 能代替 Exuberant Ctags 吗?

c++ 自动覆盖有符号/无符号

c++ - 生成运算符的签名=()?

c++ - 访问与某个位置直接相邻的多维数组中的所有位置?