#include <iostream>
#include <vector>
#include <typeinfo>
#include <memory>
using namespace std;
class Tour
{
public:
Tour() {}
virtual void Display() const { cout << "NOT guided tour." << endl; }
};
class GuidedTour : public Tour
{
public:
GuidedTour() : Tour() {}
void Display() const { cout << "Guided tour." << endl; }
};
int main()
{
std::vector<std::unique_ptr<Tour>> list;
list.emplace_back(new Tour);
list.emplace_back(new GuidedTour);
list.emplace_back(new Tour);
list.emplace_back(new GuidedTour);
list.emplace_back(new Tour);
for ( auto& t : list )
{
if ( typeid(*t) == typeid(GuidedTour) )
cout << "TypeId : GuidedTour" << endl;
else
cout << "TypeId : Not GuidedTour" << endl;
t->Display();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxtZW1vcnk+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVG91cgp7CnB1YmxpYzoKCVRvdXIoKSB7fQoKCXZpcnR1YWwgdm9pZCBEaXNwbGF5KCkgY29uc3QgeyBjb3V0IDw8ICJOT1QgZ3VpZGVkIHRvdXIuIiA8PCBlbmRsOyB9Cn07CgpjbGFzcyBHdWlkZWRUb3VyIDogcHVibGljIFRvdXIKewpwdWJsaWM6CglHdWlkZWRUb3VyKCkgOiBUb3VyKCkge30KCgl2b2lkIERpc3BsYXkoKSBjb25zdCB7IGNvdXQgPDwgIkd1aWRlZCB0b3VyLiIgPDwgZW5kbDsgfQp9OwoKaW50IG1haW4oKQp7CglzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VG91cj4+IGxpc3Q7CgoJbGlzdC5lbXBsYWNlX2JhY2sobmV3IFRvdXIpOwoJbGlzdC5lbXBsYWNlX2JhY2sobmV3IEd1aWRlZFRvdXIpOwoJbGlzdC5lbXBsYWNlX2JhY2sobmV3IFRvdXIpOwoJbGlzdC5lbXBsYWNlX2JhY2sobmV3IEd1aWRlZFRvdXIpOwoJbGlzdC5lbXBsYWNlX2JhY2sobmV3IFRvdXIpOwoKCWZvciAoIGF1dG8mIHQgOiBsaXN0ICkKCXsKCQlpZiAoIHR5cGVpZCgqdCkgPT0gdHlwZWlkKEd1aWRlZFRvdXIpICkKCQkJY291dCA8PCAiVHlwZUlkIDogR3VpZGVkVG91ciIgPDwgZW5kbDsKCQllbHNlCgkJCWNvdXQgPDwgIlR5cGVJZCA6IE5vdCBHdWlkZWRUb3VyIiA8PCBlbmRsOwoKCQl0LT5EaXNwbGF5KCk7Cgl9Cn0=