我想要一个接口 ModelGenerator,它有一个方法 generate(),它接受一个可迭代的证据列表并创建一个模型。使用 STL 伪鸭类型迭代器习惯用法...
template<class Model>
class ModelGenerator {
public:
template<class Iterator>
virtual bool generate(Iterator begin, Iterator end, Model& model) = 0;
};
但是虚函数不能被模板化。所以我必须对整个班级进行模板化:
template<class Model, class Iterator>
class ModelGenerator {
public:
virtual bool generate(Iterator begin, Iterator end, Model& model) = 0;
};
理想情况下,我想做的是这样的......
template<class Model, class Evidence>
class ModelGenerator {
public:
virtual bool generate(iterator<Evidence>& begin,
iterator<Evidence>& end,
Model& model) = 0;
};
但是没有迭代器继承的接口。(std::iterator 类只包含一堆 typedef,没有方法。)
我能想到的唯一方法是给 ModelGenerator 一个方法 addEvidence(),在调用 generate() 之前将它们一个一个添加,但是我必须给 ModelGenerator 状态,这有点痛苦。
如何编写一个采用任何 STL 容器的虚拟方法?