Gre*_*reg 3 c++ function-pointers functor
我正在尝试调整我编写的一些数学代码以允许任意函数,但我似乎只能通过在编译时预先定义它们来做到这一点,这看起来很笨拙。我目前正在使用函数指针,但据我所知,函子会出现同样的问题。为了提供一个简单的例子,对于前向差分,使用的代码是:
double xsquared(double x) {
return x*x;
}
double expx(double x) {
return exp(x);
}
double forward(double x, double h, double (*af)(double)) {
double answer = (af(x+h)-af(x))/h;
return answer;
}
Run Code Online (Sandbox Code Playgroud)
其中前两个函数中的任何一个都可以作为第三个参数传递。然而,我想做的是传递用户输入(在有效的 C++ 中),而不必事先设置函数。任何帮助将不胜感激!
从历史上看,您要求的那种功能在 C++ 中是不可用的。通常的解决方法是为 C++ 以外的语言嵌入解释器(例如 Lua 和 Python 专门设计用于集成到 C/C++ 应用程序中以允许编写它们的脚本),或者使用您的应用程序创建特定于您的应用程序的新语言自己的解析器、编译器等。但是,这正在改变。
Clang 是一种新的开源编译器,由 Apple 开发,它利用了 LLVM。Clang 从头开始设计,不仅可以用作编译器,还可以用作可以嵌入到应用程序中的 C++ 库。我自己还没有尝试过,但是您应该可以使用 Clang 做您想做的事情——您可以将它链接为一个库,并要求它编译您的用户输入到应用程序中的代码。
您可以尝试查看ClamAV 团队是如何做到这一点的,以便可以用 C 编写新的病毒定义。
至于其他编译器,我知道 GCC 最近增加了对插件的支持。也许可以利用它来桥接 GCC 和您的应用程序,但由于 GCC 从一开始就不是为用作库而设计的,因此可能会更加困难。我不知道任何其他具有类似能力的编译器。