如何解决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 举报,一经查实,本站将立刻删除。