如何在类模板的纯虚拟函数中使用迭代器

How to use iterators in a pure virtual function of a class template?

本文关键字:函数 虚拟 迭代器      更新时间:2024-09-27

我想用一个方法为数据处理器声明一个接口类"过程";它将迭代器作为参数:;"开始";以及";结束";指向要处理的类型T的第一个和(在后面(最后一个数据项;目的地";应将处理后的T型数据复制到的位置处的点。

目标是将这个接口子类化,并让工厂决定应该创建哪些子类来处理数据。如果不能像下面这样定义接口,这就不起作用:

template<typename T>
class Data_processor
{
public: 
virtual void process_data(It_In start, It_In end, It_out destination) = 0;
};

知道怎么做吗?

听起来,将调用process_data的代码可以用Data_processor作为UnaryOperation来调用std::transform

即代替

template<typename T>
class Data_processor
{
public: 
virtual void process_data(It_In start, It_In end, It_out destination) = 0;
};
Data_processor<int> * processor = factory.make_processor<int>(args...);
processor->process_data(source.begin(), source.end(), dest.begin());

你会有

template<typename T>
class Data_processor
{
public: 
virtual T operator()(T datum) = 0;
};
Data_processor<int> * processor = factory.make_processor<int>(args...);
std::transform(source.begin(), source.end(), dest.begin(), std::ref(*processor));

但是,如果Data_processor没有任何其他成员,则可以使用std::function<T(T)>

std::function<int(int)> processor = factory.make_processor<int>(args...);
std::transform(source.begin(), source.end(), dest.begin(), processor);