Re: [問題] virtual static function
: class BaseComparator
: {
: public :
: virtual bool operator () (Data *, Data *) = 0;
: };
: class ColumnOneComparator : public BaseComparator
: {
: public:
: bool operator () (Data *a, Data *b)
: {
: return a->ColumnOne < b->ColumnOne;
: }
: };
: class ColumnTwoComparator : public BaseComparator
: {
: public:
: bool operator () (Data *a, Data *b)
: {
: return a->ColumnTwo < b->ColumnTwo;
: }
: };
: class CompositeComparator
: {
: BaseComparator *C;
改成pointer
: public:
: CompositeComparator(BaseComparator *c):C(c){}
: bool operator ()(Data *a, Data *b){return (*C)(a,b);}
相對應的改變
: };
: void LetMeSortThatForYou(vector<Data *> &v, BaseComparator *c)
: {
: sort(v.begin(), v.end(), CompositeComparator(c));
: }
: /////////
經過測試是OK的
不過做了點修改 畢竟如果不是pointer的宣告 compiler會不給過
BaseComparator *cmp = new ColumnTwoComparator();
LetMeSortThatForYou(v, cmp);
Terminal:
39, 0.22
85, 0.25
7, 0.55
32, 0.73
53, 0.9
BaseComparator *cmp = new ColumnOneComparator();
LetMeSortThatForYou(v, cmp);
Terminal:
7, 0.55
32, 0.73
39, 0.22
53, 0.9
85, 0.25
測試成功 polymorphism的部分也很正確
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.124.182.185
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):