1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <iostream> #include <cstdlib> #include <cstdio> #include <vector> using namespace std; class Query; class IFilter { public: virtual void modifyQuery(Query* query) = 0; }; template <typename T> class Filter : public IFilter { public: virtual void modifyQuery(Query* query); }; class DateFilter; class NameFilter; class Query { public: void applyFilter(IFilter* filter) { cout << "applying Filter" << endl; filter->modifyQuery(this); } void applyFilter(NameFilter* filter) { cout << "applying NameFilter" << endl; } void applyFilter(DateFilter* filter) { cout << "applying DateFilter" << endl; } }; template <typename T> void Filter<T>::modifyQuery(Query* query) { query->applyFilter(dynamic_cast<T*> (this)); } class DateFilter : public Filter<DateFilter> { }; class NameFilter : public Filter<NameFilter> { }; int main() { Query* query = new Query(); IFilter* nameFilter = new NameFilter(); IFilter* dateFilter = new DateFilter(); std::vector<IFilter*> filterList; filterList.push_back(nameFilter); filterList.push_back(dateFilter); for (int i = 0; i < 2; ++i) { query->applyFilter(filterList[i]); } return 0; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmNsYXNzIFF1ZXJ5OwogCmNsYXNzIElGaWx0ZXIKewpwdWJsaWM6CiAgdmlydHVhbCB2b2lkIG1vZGlmeVF1ZXJ5KFF1ZXJ5KiBxdWVyeSkgPSAwOwp9OwogCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBGaWx0ZXIgOiBwdWJsaWMgSUZpbHRlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIHZvaWQgbW9kaWZ5UXVlcnkoUXVlcnkqIHF1ZXJ5KTsKfTsKIApjbGFzcyBEYXRlRmlsdGVyOwpjbGFzcyBOYW1lRmlsdGVyOwogCmNsYXNzIFF1ZXJ5CnsKcHVibGljOgogCiAgdm9pZCBhcHBseUZpbHRlcihJRmlsdGVyKiBmaWx0ZXIpCiAgewogICAgY291dCA8PCAiYXBwbHlpbmcgRmlsdGVyIiA8PCBlbmRsOwogICAgZmlsdGVyLT5tb2RpZnlRdWVyeSh0aGlzKTsKICB9CiAKICB2b2lkIGFwcGx5RmlsdGVyKE5hbWVGaWx0ZXIqIGZpbHRlcikKICB7CiAgICBjb3V0IDw8ICJhcHBseWluZyBOYW1lRmlsdGVyIiA8PCBlbmRsOwogIH0KIAogIHZvaWQgYXBwbHlGaWx0ZXIoRGF0ZUZpbHRlciogZmlsdGVyKQogIHsKICAgIGNvdXQgPDwgImFwcGx5aW5nIERhdGVGaWx0ZXIiIDw8IGVuZGw7CiAgfQp9OwogCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIEZpbHRlcjxUPjo6bW9kaWZ5UXVlcnkoUXVlcnkqIHF1ZXJ5KQp7CiAgcXVlcnktPmFwcGx5RmlsdGVyKGR5bmFtaWNfY2FzdDxUKj4gKHRoaXMpKTsKfQogCmNsYXNzIERhdGVGaWx0ZXIgOiBwdWJsaWMgRmlsdGVyPERhdGVGaWx0ZXI+CnsKfTsKIApjbGFzcyBOYW1lRmlsdGVyIDogcHVibGljIEZpbHRlcjxOYW1lRmlsdGVyPgp7Cn07CiAKaW50IG1haW4oKQp7CiAgUXVlcnkqIHF1ZXJ5ID0gbmV3IFF1ZXJ5KCk7CiAgSUZpbHRlciogbmFtZUZpbHRlciA9IG5ldyBOYW1lRmlsdGVyKCk7CiAgSUZpbHRlciogZGF0ZUZpbHRlciA9IG5ldyBEYXRlRmlsdGVyKCk7CiAKICBzdGQ6OnZlY3RvcjxJRmlsdGVyKj4gZmlsdGVyTGlzdDsKICBmaWx0ZXJMaXN0LnB1c2hfYmFjayhuYW1lRmlsdGVyKTsKICBmaWx0ZXJMaXN0LnB1c2hfYmFjayhkYXRlRmlsdGVyKTsKIAogIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKQogIHsKICAgIHF1ZXJ5LT5hcHBseUZpbHRlcihmaWx0ZXJMaXN0W2ldKTsKICB9CiAgcmV0dXJuIDA7Cn0=
-
upload with new input
-
result: Success time: 0.02s memory: 2860 kB returned value: 0
applying Filter applying NameFilter applying Filter applying DateFilter


