我的学习问题我的问题很小。
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::vector
和F porownywacz
获取容器 - 它和比较数组的两个元素的功能对象
最后 - 我想我无法改变这段代码,我是从老师那里得到的,我认为我必须让它成功。
答案 0 :(得分:1)
问题在于F porownywacz
,它不能是具有纯虚函数的模板。
Virtual member functions can't be templates,引用clang“virtual
无法在成员函数模板上指定”。
来自cppreference网站;
成员函数模板不能是虚拟的,派生类中的成员函数模板不能覆盖基类中的虚拟成员函数。
这里的区别基本上归因于virtual
函数是“运行时事物”,它们在运行时被解析。模板类型需要在编译时解析。
你是否在课堂上使用一致的编辑器,教师使用什么?我会向你的老师讲述这个问题,引用编译错误并检查你和你的同伴在同一个页面上,还谈谈他们得到的错误。
This Q&A包含您可能感兴趣的更多细节和一些替代方案。