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

Virtual method template in Class template C++

本问题已经有最佳答案,请猛点这里访问。

我的学习有点小问题。

1
2
3
4
5
6
7
    template<typename T>
    class AlgorytmSortujacy
       {
       public:
          template <typename F>
          virtual std::vector<T> sortuj(std::vector<T>  w, F porownywacz) const = 0;
       };

该代码必须是排序算法的接口。当我实现冒泡排序时,我必须从这个类派生并实现sortuj函数。

问题是VS2013不接受这些形式的代码,我的意思是模板虚拟函数(c2898错误)。你知道有什么解决办法吗?

如您所见,sort函数从std::vectorF porownywacz中获取容器—它是和函数对象,用于比较数组的两个元素

最后-我想我不能更改这个代码,我是从老师那里得到的,我想我必须让它工作。


问题出在F porownywacz上,它不能是纯虚函数的模板。

虚拟成员函数不能是模板,引用clang"在成员函数模板上不能指定virtual"。

来自CPP参考网站;

A member function template cannot be virtual, and a member function template in a derived class cannot override a virtual member function from the base class.

这里的区别主要归因于virtual函数是"运行时的东西",它们在运行时被解决。模板类型需要在编译时解析。

你在课堂上用的是一致的编译器吗?老师用的是什么?我会和你的老师讨论这个问题,引用编译器的错误,并检查你是否和你的同学在同一个页面上,告诉他们他们会出现什么错误。

本问答包含更多细节和您可能感兴趣的一些备选方案。