#include <iostream>
#include <vector>
using namespace std;

template <class T>
class templateWithVector {
public:
    std::vector<T*>vec;
 
    T *getFromVector(unsigned int idx) {
        if (idx < vec.size())
            return vec.at(idx);
        return nullptr;
    }
};
 
class classBase {
protected:	
  virtual ~classBase() {};
};
class bSpecifics{};
 
class B : public classBase, public templateWithVector<bSpecifics> {
public:
    B() {
        for (int i = 0; i < 3; i++)
            vec.push_back(new bSpecifics());
    }
};

class C: public templateWithVector<bSpecifics>
{
};

int main() {
	{
		classBase *myB = new B();
		templateWithVector<bSpecifics> *p = dynamic_cast<templateWithVector<bSpecifics>*>(myB);
		if (p != nullptr)
		    cout << "B:" << p->getFromVector(1) << endl;
	}
	{
		templateWithVector<bSpecifics> *myC = new C();
		templateWithVector<bSpecifics> *p = dynamic_cast<templateWithVector<bSpecifics>*>(myC);
		if (p != nullptr)
		    cout << "C:" << p->getFromVector(1) << endl;
	}

	return 0;
}