c++ - 如何在类模板的纯虚函数中使用迭代器?

问题描述

我想为数据处理器声明一个接口类,该方法使用迭代器作为参数的方法“process”:“start”和“end”指向要处理的第一个和(后面)类型 T 的最后一个数据项,“destination”指向T类型的处理过的数据要复制到的位置。

目标是对这个接口进行子类化,并让工厂决定应该创建哪些子类来处理数据。如果无法定义类似于以下内容的接口,则这不起作用:

template<typename T>
class Data_processor
{
public: 

    virtual void process_data(It_In start,It_In end,It_out destination) = 0;
};

知道如何做到这一点吗?

解决方法

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

即而不是

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(),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(),processor);