我是否知道如何将stl::list::sort
函数与外部函数一起用于抽象数据类型?
构造函数的示例代码如下所示:
ADType::ADType(string name, int object){
//constructor code
}
对于方法:
using <list>
using namespace std;
bool compare_Object(ADType& first, ADType& second){
//search algorithm
return true;
}
int main(){
ADType test1 = ADType("Test 1", 123);
ADType test2 = ADType("Test 3", 142);
ADType test3 = ADType("Test 2", 200);
list<ADType> testlist;
testlist.push_back(test1);
testlist.push_back(test2);
testlist.push_back(test3);
testlist.sort(compare_Object);
//code to print out objects in list
}
上面的行给了我函数调用缺失参数列表的错误C3867和没有参数的函数的C2660。我刚刚发布的代码有什么问题吗?
答案 0 :(得分:1)
您的示例代码存在一些问题(不完整,可能切片,不是const正确),并且没有显示任何多态性。
在C ++ 11中,您可以这样做:
#include <iostream>
#include <memory>
#include <list>
struct A {
virtual ~A() {}
virtual void print() const { std::cout << "A\n"; }
};
struct B : A {
virtual void print() const { std::cout << "B\n"; }
};
inline bool operator < (const A& a, const A& b) {
return dynamic_cast<const A*>(&a) && dynamic_cast<const B*>(&b);
}
template <typename T>
inline bool less_unique_ptr(const std::unique_ptr<A>& a, const std::unique_ptr<A>& b) {
return *a < *b;
}
int main (int argc, char *argv[])
{
std::list<std::unique_ptr<A>> ptr_list;
ptr_list.emplace_back(new B);
ptr_list.emplace_back(new B);
ptr_list.emplace_back(new A);
ptr_list.sort(less_unique_ptr<A>);
for(const auto& e : ptr_list)
e->print();
return 0;
}
答案 1 :(得分:0)
更简单的修复方法是将compare方法实现为静态方法,因此不需要对象实例来使用该方法。
static bool compare_Object(BaseObj& first, BaseObj& second){
return first.getLength() > second.getLength();
// return true give me error since it can't really sort.
}
BaseObj类:
BaseObj::BaseObj(int a) {
length = a;
}
int BaseObj::getLength() {
return length;
}