#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIHRlbXBsYXRlV2l0aFZlY3RvciB7CnB1YmxpYzoKICAgIHN0ZDo6dmVjdG9yPFQqPnZlYzsKIAogICAgVCAqZ2V0RnJvbVZlY3Rvcih1bnNpZ25lZCBpbnQgaWR4KSB7CiAgICAgICAgaWYgKGlkeCA8IHZlYy5zaXplKCkpCiAgICAgICAgICAgIHJldHVybiB2ZWMuYXQoaWR4KTsKICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgIH0KfTsKIApjbGFzcyBjbGFzc0Jhc2Ugewpwcm90ZWN0ZWQ6CQogIHZpcnR1YWwgfmNsYXNzQmFzZSgpIHt9Owp9OwpjbGFzcyBiU3BlY2lmaWNze307CiAKY2xhc3MgQiA6IHB1YmxpYyBjbGFzc0Jhc2UsIHB1YmxpYyB0ZW1wbGF0ZVdpdGhWZWN0b3I8YlNwZWNpZmljcz4gewpwdWJsaWM6CiAgICBCKCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQogICAgICAgICAgICB2ZWMucHVzaF9iYWNrKG5ldyBiU3BlY2lmaWNzKCkpOwogICAgfQp9OwoKY2xhc3MgQzogcHVibGljIHRlbXBsYXRlV2l0aFZlY3RvcjxiU3BlY2lmaWNzPgp7Cn07CgppbnQgbWFpbigpIHsKCXsKCQljbGFzc0Jhc2UgKm15QiA9IG5ldyBCKCk7CgkJdGVtcGxhdGVXaXRoVmVjdG9yPGJTcGVjaWZpY3M+ICpwID0gZHluYW1pY19jYXN0PHRlbXBsYXRlV2l0aFZlY3RvcjxiU3BlY2lmaWNzPio+KG15Qik7CgkJaWYgKHAgIT0gbnVsbHB0cikKCQkgICAgY291dCA8PCAiQjoiIDw8IHAtPmdldEZyb21WZWN0b3IoMSkgPDwgZW5kbDsKCX0KCXsKCQl0ZW1wbGF0ZVdpdGhWZWN0b3I8YlNwZWNpZmljcz4gKm15QyA9IG5ldyBDKCk7CgkJdGVtcGxhdGVXaXRoVmVjdG9yPGJTcGVjaWZpY3M+ICpwID0gZHluYW1pY19jYXN0PHRlbXBsYXRlV2l0aFZlY3RvcjxiU3BlY2lmaWNzPio+KG15Qyk7CgkJaWYgKHAgIT0gbnVsbHB0cikKCQkgICAgY291dCA8PCAiQzoiIDw8IHAtPmdldEZyb21WZWN0b3IoMSkgPDwgZW5kbDsKCX0KCglyZXR1cm4gMDsKfQ==