所以我想使用对象函数对子类中的数组进行排序。母类是通用的。在C++中使用自定义函数对数组进行排序,其中母类是通用的
template<typename T>
class MotherClass
{
public:
/* some code */
std::list<T*> getList();
private:
std::list<T*> list_;
}
子类使用另一个类为模板
class OtherClass
{
public:
/* some code */
std::string getName() const;
private:
std::string name_;
}
这里是仿函数类
class Functor
{
public:
/* some code */
bool operator() (OtherClass* a, OtherClass* b) const
{
return a->getName() < b->getName();
}
}
最后,这里是子类
class ChildClass : public MotherClass<OtherClass>
{
public:
/* some code */
friend std::ostream& operator<<(std::ostream& o, const ChildClass& child);
}
std::ostream& operator<<(std::ostream& o, const ChildClass& child)
{
Functor functor;
std::sort(child.getList().begin(), child.getList().end(), functor);
/* some code */
}
当我评论排序行ChildClass,解决方案构建没有任何问题。虽然,当它在那里,这个错误发生。
错误C2784: '未知类型的std ::运营商 - (标准:: move_iterator < _RanIt> &,常量的std :: move_iterator < _RanIt2> &)':不能推导出模板参数为“的std :: move_iterator < _RanIt“从 'STD> & :: _ List_unchecked_iterator >>'
任何人都可以帮忙吗?
请提供[mcve]。我不明白你的代码。例如在'operator <<'中,您对'child'列表进行排序,但参数'child'是'const' – user463035818
您的'child.getList()'返回一个值,因此'child.getList()。begin() '和'child.getList()。end()'是来自两个不同容器的迭代器 – user463035818
您提供了第一条错误消息还是最后一条错误消息?第一个更重要。 – aschepler