由于C ++ 11中不允许使用虚拟模板方法,是否有一种从超类调用子类方法的解决方法? 我有一些课程(访客设计的一部分)。它们是遍历自定义树的算法。
在&#34;访问者条款中说话&#34;:我的访问者是遍历树的算法,元素是我的自定义tree<T>
类型的迭代器。
简而言之:我需要一个接受任何type_of_iterator<T>
的纯虚方法,而不使用奇怪的重复模板模式(iterator_visitor<T>
必须对每个具体访问者都相同。)
// this is the virtual visitor
template <typename T>
class iterator_visitor {
// increments FORWARD regardless the iterator verse
template <typename It> virtual void increment(const It&) const = 0;
// increments BACKWARD regardless the iterator verse
template <typename It> virtual void decrement(const It&) const = 0;
void visit_increment(iterator<T>&) const;
void visit_decrement(iterator<T>&) const;
// same for const_iterator<T>, reverse_iterator<T> and const_reverse_iterator<T>
};
// concrete iterator example
class pre_order final : public iterator_visitor<T> {
template <typename Iterator> void increment(const Iterator&) const override;
template <typename Iterator> void decrement(const Iterator&) const override;
};
我的要求是:
visit_increment(...)
,visit_decrement(...)
方法。 (tree<T>
具有iterator_visitor<T>&
属性)答案 0 :(得分:1)
你必须为你的函数参数使用一个非通用的基类,其他一切都没有意义,并暗示一个设计缺陷。