微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。