我正在尝试构建一个通用算法。到目前为止,我已经使用类层次结构和指针来实现了这一点,如下面的示例所示:
struct Base{
virtual double fn(double x){return 0;}
};
class Derived : public Base{
double A;
public:
Derived(double a) : A(a) {}
double fn(double x) { return A*x;}
};
//Some other implementations
class algo{
double T;
std::unique_ptr<Base> b_ptr;
public:
algo(double t, std::unique_ptr<Base>& _ptr); //move constructor...
//Some constructors
double method(double x){ return T*b_ptr->fn(x);}
};
这个设置随后按照以下方式实现:
int main(){
std::unique_ptr<Derived> ptr(new Derived(5.4));
algo(3.2,ptr);
method(2.4);
return 0;
}
这是一个非常简单的例子,当然只是为了解答我的问题。据我所知,使用派生类的方式意味着方法在运行时而不是编译时选择。由于我的算法不需要任何动态行为 - 一切都在编译时确定 - 这是无谓的效率损失。是否有一种方法可以在编译时执行上述操作,即静态多态性?
据我所知,只有使用模板才可能获得静态多态性。但我还没有找到如何实现非原始类型的模板。就像上面的例子,我需要具有非默认构造函数的派生类,这似乎是不可能的... 是否有人能提供任何解决方案吗?