模板化虚拟方法

时间:2013-11-16 02:45:43

标签: c++ polymorphism

我有几个模型,它们都使用相同的方法具有相同的界面,必须模板化:

template <typename T>
struct BaseModel {

  template <typename T> inline void
    method1(const T& x, const T& y, T& xx, T& yy) const;

  template <typename T> inline void
    method2(const T& x, const T& y, T& xx, T& yy) const;

};


struct ImplModel1 : public BaseModel<T> {

  template <typename T> inline void
    method1(const T& x, const T& y, T& xx, T& yy) const {
        ...
    }

  template <typename T> inline void
    method2(const T& x, const T& y, T& xx, T& yy) const {
        ...
    }

};

同时我希望能够将派生模型传递给函数:

dynamic_function(BaseModel& model, ...) {
    // do something with one of the derived models
    model.method1<double>(...);
    model.method1<ObjectXY>(...);
    model.method2<int>(...);
    ...
}

dynamic_function(ImplModel1(), ...)
dynamic_function(ImplModel2(), ...)

实际上,结构应该只作为函数的容器,并且根本不会使用它的面向对象的特性。我只想保存并传递这些模板化的函数。访问函数应该很快(这就是我内联它们的原因)。

这有可能吗?我也对任何其他设计建议持开放态度。

0 个答案:

没有答案