C++:从父类(super class)调用函数模板

标签 c++ multithreading templates c++11 virtual

由于 C++11 中不允许使用虚拟模板方法,是否有从父类(super class)调用子类方法的变通方法? 我有一些类(class)(访客设计的一部分)。它们是遍历自定义树的算法。

用“访问者术语”来说:我的访问者是遍历树的算法,元素是我自定义的迭代器 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;
};

我的要求是:

  • 我需要一个唯一的接口(interface)来引用访问者(无 CRTP)并从此接口(interface)调用 visit_increment(...) , visit_decrement(...)方法。 (tree<T> 有一个 iterator_visitor<T>& 属性)
  • 我不想使用 void 指针,因为我觉得它有点脏。
  • 它必须是线程安全的。

最佳答案

您必须为您的函数参数使用非泛型基类,其他所有内容都毫无意义并表明存在设计缺陷。

关于C++:从父类(super class)调用函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234913/

相关文章:

c++ - 模板特化 - 提供可选模板

c++ - 警告 : definition of implicit copy constructor is deprecated

c++ - 奇怪的舍入行为

c++ - YUV -> RGB 转换可以硬件加速吗?

linux - epoll_wait() 无限返回 EINTR

C# WinForms :- Why Thread Timer tick event not elapsed when UI is doing some other operation?

MySQL 查询正在等待其他查询完成

c++ - 返回 PVOID 的模板函数

c++ - 类型安全的 C++11 枚举类标志模板

c++ - 抽取 Eigen vector