Jac*_*dre 6 c++ virtual templates iterator stl
我想要一个接口ModelGenerator,它有一个方法generate(),它接受一个可迭代的Evidence列表并创建一个Model.使用STL伪鸭输入迭代器成语...
template<class Model>
class ModelGenerator {
public:
template<class Iterator>
virtual bool generate(Iterator begin, Iterator end, Model& model) = 0;
};
Run Code Online (Sandbox Code Playgroud)
但虚函数无法模板化.所以我必须模拟整个班级:
template<class Model, class Iterator>
class ModelGenerator {
public:
virtual bool generate(Iterator begin, Iterator end, Model& model) = 0;
};
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想做的是这样的......
template<class Model, class Evidence>
class ModelGenerator {
public:
virtual bool generate(iterator<Evidence>& begin,
iterator<Evidence>& end,
Model& model) = 0;
};
Run Code Online (Sandbox Code Playgroud)
但迭代器没有继承这样的接口.(类std :: iterator只包含一堆typedef,没有方法.)
我能想到的唯一方法是给ModelGenerator一个方法addEvidence(),它在调用generate()之前逐个添加它们,但是我必须给出一个有点痛苦的ModelGenerator状态.
如何编写一个带有任何STL容器的虚方法?
你似乎需要一个any_iterator.这是一个迭代器,它执行类型擦除以使您与实际的迭代器实现绝缘.
Adobe有一个实现any_iterator:http:
//stlab.adobe.com/classadobe_1_1any__iterator.html
Boost有一个实现any_range:http:
//www.boost.org/doc/libs/1_49_0/libs/range/doc/html/range/reference/ranges/any_range.html
| 归档时间: |
|
| 查看次数: |
1121 次 |
| 最近记录: |