我有几个模型,它们都使用相同的方法具有相同的界面,必须模板化:
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(), ...)
实际上,结构应该只作为函数的容器,并且根本不会使用它的面向对象的特性。我只想保存并传递这些模板化的函数。访问函数应该很快(这就是我内联它们的原因)。
这有可能吗?我也对任何其他设计建议持开放态度。