我想使用不同的策略來排序向量。但我不知道如何傳遞一個子函數,並在稍後使用它在std::sort
中。每當我使用抽象類進行排序策略時,我最終會遇到cannot allocate an object of abstract type
錯誤。有沒有辦法使用繼承函子作爲std::sort
參數?謝謝!std ::使用繼承的函子排序
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class BaseSort{
public:
virtual ~BaseSort() {};
virtual bool operator()(const int& a, const int& b) = 0;
};
class Asc : public BaseSort{
public:
bool operator()(const int& a, const int& b){
return a < b;
}
};
class Desc : public BaseSort{
public:
bool operator()(const int& a, const int& b){
return a > b;
}
};
void print(const vector<int>& values) {
for (unsigned i = 0; i < values.size(); ++i) {
cout << values[i] << ' ';
}
cout << endl;
}
int main() {
vector<int> values = {2,1,3};
sort(values.begin(), values.end(), Asc()); // {1,2,3}
print(values);
sort(values.begin(), values.end(), Desc()); // {3,2,1}
print(values);
Asc* asc = new Asc();
sort(values.begin(), values.end(), *asc); // {1,2,3}
print(values);
BaseSort* sortStrategy = new Desc();
sort(values.begin(), values.end(), *sortStrategy); //cannot allocate an object of abstract type ‘BaseSort’
print(values);
return 0;
}
沒有關係的,但是比較器的功能,操作者應'const'。即'虛擬布爾運算符()(const int&a,const int&b)const = 0;' – WhozCraig 2013-03-25 00:27:23