Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Handling new types without using RTTI
//Title of this code //g++ 4.8.2 #include <iostream> #include <vector> #include <algorithm> struct Security; struct Bond; struct Stock; struct Checker { virtual bool check(const Security&) const { return false; }; virtual bool check(const Bond&) const { return false; } virtual bool check(const Stock&) const { return false; } }; struct Security { virtual const char * getName() const = 0; virtual bool check(const Checker& checker) const = 0; }; struct Bond : public Security { const char * getName() const { return "bond"; } bool check(const Checker& checker) const { return checker.check(*this); } }; struct Stock : public Security { const char * getName() const { return "stock"; } bool check(const Checker& checker) const { return checker.check(*this); } }; struct IsBond : public Checker { bool check(const Bond&) const { std::cout<<"IsBond(bond)..."<<std::endl; return true; } bool check(const Security&) const { std::cout<<"IsBond(security)..."<<std::endl; return false; } }; struct IsStock : public Checker { bool check(const Stock&) const { return true; } bool check(const Security&) const { return false; } }; template<class Checker> struct CheckerFunctor { bool operator()(const Security* sec) const { static Checker checker; return sec->check(checker); } }; int main() { std::vector<Security*> securities; securities.push_back(new Bond()); securities.push_back(new Stock()); securities.push_back(new Bond()); securities.push_back(new Bond()); securities.push_back(new Stock()); securities.push_back(new Bond()); securities.push_back(new Stock()); securities.push_back(new Bond()); std::cout << securities.size() << std::endl; securities.erase(std::remove_if(securities.begin(), securities.end(), CheckerFunctor<IsStock>()), securities.end()); std::cout << securities.size() << std::endl; }
run
|
edit
|
history
|
help
0
ForwardLiceSplice
RegexMatch
string match2
decode
TmpFib
Newspaper
rstring
hey
Game
Value equal to index value