我想通过几种方式简单地将我的初始化函数对象传递给我自己的函数。
我没有找到任何仅使用“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/