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::vector
和 F 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 包含更多详细信息和您可能感兴趣的一些替代方案。
我的学习问题有点小问题。
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::vector
和 F 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 包含更多详细信息和您可能感兴趣的一些替代方案。