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> #include <memory> 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 { return true; } bool check(const Security&) const { 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 std::shared_ptr<Security> sec) const { static Checker checker; return sec->check(checker); } }; int main() { std::vector<std::shared_ptr<Security>> securities; securities.push_back(std::make_shared<Bond>()); securities.push_back(std::make_shared<Stock>()); securities.push_back(std::make_shared<Bond>()); securities.push_back(std::make_shared<Bond>()); securities.push_back(std::make_shared<Stock>()); securities.push_back(std::make_shared<Bond>()); securities.push_back(std::make_shared<Stock>()); securities.push_back(std::make_shared<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
static_cast makes a copy
O
CodeChef P2 - FIZZA
typecasting
fastest input taking for large files
11340 v3.1
Q
Pointer
Trapping rain water problem
¡Arriba, Papalotes, Arriba!