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

Virtual method template in Class template C++

我的学习问题有点小问题。

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

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

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

如您所见,sort 函数从 std::vectorF porownywacz 获取容器 - 它是比较数组

两个元素的函数对象

最后 - 我想我无法更改此代码,我是从老师那里得到的,我想我必须让它工作。

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

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

来自 cppreference 站点;

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 函数是 "runtime thing," 它们在运行时解析。模板类型需要在编译时解析。

你在 class 中使用符合标准的编译器吗,老师用的是什么?我会就此问题向您老师咨询,引用编译器错误并检查您是否与您的 class 伙伴在同一页面上,并与他们讨论他们遇到的错误。


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