#include <iostream>
#include <vector>
using namespace std;
class Repo {};
class ITok {};
class IInherit
{
public:
virtual ~IInherit() {}
virtual void doAction(ITok*& pTc)=0;
};
class cDerived: public IInherit
{
Repo* p_Repos;
public:
cDerived(Repo* pRepos)
{
p_Repos = pRepos;
}
Repo* GetRepo()
{
return p_Repos;
}
void doAction(ITok*& pTc)
{
///some logic
}
};
int main(int argc, char *argv[]) {
vector<IInherit*> v;
Repo r;
cDerived cd(&r);
v.push_back(&cd);
Repo *rep = static_cast<cDerived*>(v[0])->GetRepo();
cout << "done" << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUmVwbyB7fTsKY2xhc3MgSVRvayB7fTsKCmNsYXNzIElJbmhlcml0CnsKcHVibGljOgogICAgdmlydHVhbCB+SUluaGVyaXQoKSB7fQogICAgdmlydHVhbCB2b2lkIGRvQWN0aW9uKElUb2sqJiBwVGMpPTA7Cn07CgpjbGFzcyBjRGVyaXZlZDogcHVibGljIElJbmhlcml0CnsKICAgIFJlcG8qIHBfUmVwb3M7CnB1YmxpYzoKICAgIGNEZXJpdmVkKFJlcG8qIHBSZXBvcykKICAgIHsKICAgICAgICBwX1JlcG9zID0gcFJlcG9zOwogICAgfQogICAgUmVwbyogR2V0UmVwbygpCiAgICB7CiAgICAgICAgICAgIHJldHVybiBwX1JlcG9zOwogICAgfQogICAgdm9pZCBkb0FjdGlvbihJVG9rKiYgcFRjKQogICAgewogICAgICAgLy8vc29tZSBsb2dpYwogICAgfQoKfTsKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICB2ZWN0b3I8SUluaGVyaXQqPiB2OwogICAgUmVwbyByOwogICAgY0Rlcml2ZWQgY2QoJnIpOwogICAgdi5wdXNoX2JhY2soJmNkKTsKICAgIFJlcG8gKnJlcCA9IHN0YXRpY19jYXN0PGNEZXJpdmVkKj4odlswXSktPkdldFJlcG8oKTsKICAgIGNvdXQgPDwgImRvbmUiIDw8IGVuZGw7Cn0=