#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;
}