2013-02-20 68 views
1

我有一个基函数如何从参数化的基本函数生成多个函数指针?

int base(const int i, const double &x)

在这个函数中,我认为i是一个“参数”(其可以采取预定义的值从0到N-1),而x我认为的实际的“参数”(可以取任意值)。我需要的是创建一个函数指针数组int (*pointers[N])(const double &x)。阵列的每个成员对应于参数i的不同值,因此每个呼叫pointers[n](x)应等同于呼叫base(n, x)

有没有办法实现这个功能?

我一直在试图教育自己关于函子(这是一种方式去?),最近也研究了std::bind,但我的理解是,它只适用于C + + 11(我目前不能使用)。

任何建议或代码片段将是非常有用的。谢谢!

回答

1

可以使用非捕获lambda表达式为:

typedef int (*fp)(double); 

fp p1 = [](double x) -> int { return base(1, x); }; 
fp p2 = [](double x) -> int { return base(2, x); }; 
fp p3 = [](double x) -> int { return base(3, x); }; 

这并不捕获lambda表达式工作,所以你不能生成那些编程。这与C中每个值的拼写功能基本上没有区别:

int f1(double x) { return base(1, x); } 
fp p = f1; 
+0

感谢您的回答!....问题如下:不同参数值的数量很大,更重要的是,在编译时不知道。因此,我不能随便写下“p1”,“p2”,“p3”,“f1”等....我需要能够通过循环来完成命令.... – Chrys 2013-02-21 00:10:20

+0

@Chrys:不幸的是,C++中的函数不是真正的一流对象,并且不能动态地创建函数。如果你可以使用类似函数的对象,这将是微不足道的,但不是原始函数指针。他们只是没有足够的状态。 – 2013-02-21 00:18:43

+0

我需要使用原始指针才能与最初在Fortran中编写的遗留代码进行交互,我一直通过C调用它(这本来就是一团糟)......我一直在思考如何使用functor类,其中的调用操作符将链接到每个不同的函数,以及一个不同的对象,其中的函数将在循环中通过参数值创建(但是,我不太熟练,不知道如何完全做到这一点) – Chrys 2013-02-21 00:25:01

相关问题