类模板C ++中的虚方法模板

时间:2016-01-08 07:26:08

标签: c++ templates virtual stdvector

我的学习问题我的问题很小。

    template<typename T> 
    class AlgorytmSortujacy 
       { 
       public: 
          template <typename F> 
          virtual std::vector<T> sortuj(std::vector<T>  w, F porownywacz) const = 0;
       }; 

此代码必须是排序算法的接口。当我e.x.实现冒泡排序,我必须从这个类派生并实现sortuj功能。

问题是VS2013不接受那些形式的代码,我的意思是模板虚函数(C2898错误)。你知道任何解决方案吗?

如您所见,sort函数从std::vectorF porownywacz获取容器 - 它和比较数组的两个元素的功能对象

最后 - 我想我无法改变这段代码,我是从老师那里得到的,我认为我必须让它成功。

1 个答案:

答案 0 :(得分:1)

问题在于F porownywacz,它不能是具有纯虚函数的模板。

Virtual member functions can't be templates,引用clang“virtual无法在成员函数模板上指定”。

来自cppreference网站;

  

成员函数模板不能是虚拟的,派生类中的成员函数模板不能覆盖基类中的虚拟成员函数。

这里的区别基本上归因于virtual函数是“运行时事物”,它们在运行时被解析。模板类型需要在编译时解析。

你是否在课堂上使用一致的编辑器,教师使用什么?我会向你的老师讲述这个问题,引用编译错误并检查你和你的同伴在同一个页面上,还谈谈他们得到的错误。

This Q&A包含您可能感兴趣的更多细节和一些替代方案。