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
data locality - slow example
Queue with Limited Size of Arrays
derivative
Inventory
Random Vector Generator
constructing object on first use as return value of (pointer to) object-returning function
Bin Tree playground
Meeting_Leandro
32bit
Binary Search