我需要调用一个期望函数指针的方法,但我想传递给它的实际上是一个函数对象。以下是我尝试做的示例:
#include <iostream>
#include "boost/function.hpp"
typedef int (*myAdder)(int);
int adderFunction(int y) { return(2 + y); }
class adderClass {
public:
adderClass(int x) : _x(x) {}
int operator() (int y) { return(_x + y); }
private:
int _x;
};
void printer(myAdder h, int y) {
std::cout << h(y) << std::endl;
}
int main() {
myAdder f = adderFunction;
adderClass *ac = new adderClass(2);
boost::function1<int, int> g =
std::bind1st(std::mem_fun(&adderClass::operator()), ac);
std::cout << f(1) << std::endl;
std::cout << g(2) << std::endl;
printer(f, 3);
printer(g, 4); // Is there a way to get this to work?
}
我一直找不到一个让最后一行代码 printer(g, 4) 能够编译的方法。有没有办法让它正常工作?我能够控制的只有方法“main”和类“adderClass”。
printer
调用main
,那就麻烦了。但我认为在这些限制下,它是最好的选择,至少是可移植的。对于非可移植的解决方案,例如可以动态生成代码。 - Steve Jessopmain()
的东西都会导致未定义的行为(§3.6.1/2:“函数main不得在程序内使用(3.2)。”) - Jerry Coffin