我正在编写一个执行一组基本操作的程序,但允许用户填写被调用的特定函数(他们在编译之前选择这些函数)。例如,我的程序可能会调用一个函数filter(input,&output)
,但用户可以编写自己的过滤器。
我读到的可以解决这个问题的方法是函数指针和虚函数。看起来我可以按照以下方式做一些事情
int (*pt2Filter)(float,&float) = NULL;
int IIRFilter(float input, float &output);
pt2Filter=&IIRFilter;
对于函数指针。但这并不能让我跟踪过滤器中的内部状态。
或者我可以创建一个myClass
带有虚filter
函数的类,然后用户将创建一个IIR
继承myClass
并覆盖该filter
函数的类。
class myClass
{
virtual void Filter(float input, float &output);
...
};
class IIR : public myClass
{
float stateVariable;
virtual void Filter(float input, float &output);
}
void IIR::Filter(float input, float &output)
{ //IIR filter done here }
我想我的问题是如何在不知道一个IIR
类甚至存在的情况下从我的程序中调用过滤器函数?
或者,如果我完全错了,Filter
当我的目标是 1 时,我该如何调用我的函数:让用户定义他们想要的任何过滤器。2:不允许用户更改我的源代码
更新 这可能并不像我最初想象的那么困难。我创建了一个头文件,用户将在其中说出他们希望 Filter 类使用该行调用哪个函数
//User types this into "FunctionImplementations.h"
#include "IIR.h"
typedef IIR FilterImplementation;
//then I just type
#include "FunctionImplementations.h"
FilterImplementation.filter(); //Implements IIR classes filter function