如何在类模板的纯虚拟函数中使用迭代器
How to use iterators in a pure virtual function of a class template?
我想用一个方法为数据处理器声明一个接口类"过程";它将迭代器作为参数:;"开始";以及";结束";指向要处理的类型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);
相关文章:
- C++无法定义虚拟函数 OUTER 类和头文件
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 重载 -> shared_ptr 个实例中的箭头运算符<interface>,接口中没有纯虚拟析构函数
- 当覆盖存在时调用基本虚拟"binded to object"函数
- 如何在C++中伪造虚拟可变参数函数模板?
- 类型擦除的std::function与虚拟函数调用的开销
- 重写虚拟函数和继承
- 是否可以使用函数指针调用虚拟析构函数?
- 在没有动态内存的世界中,我是否需要虚拟析构函数?
- 虚拟继承基构造函数消除
- "虚拟""覆盖"析构函数
- 类中的虚拟布尔函数参数不起作用
- 用纯虚拟函数兜圈子
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- 尝试在 QLabel 上绘画失败(无法在没有对象的情况下调用成员函数"虚拟无效 QLabel::p aintEvent(QPaintEvent*)")
- 声明析构函数虚拟就足够了吗?
- 视觉 C++当我们在基类中使函数成为纯虚拟时,那么在子类中再次使相同的函数虚拟的必要性是什么
- 重载函数(虚拟/非虚拟)