fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class AbstractArray{ //<-- new class
  5. public: virtual void* get(int index)=0;
  6. };
  7.  
  8. template<class T1> class MyArray : public AbstractArray{ //<-- modify
  9. T1* internal[20];
  10. public: T1* get(int index){return internal[index];}
  11. public: void set(int index,T1* t1){internal[index]=t1;}
  12. };
  13. template<class T2> class User{
  14. public: AbstractArray* arrayPtr;
  15. public: T2* getTheBestT2(){
  16. int bestIndex=0;
  17. //.... some code to find the "bestIndex" ....
  18. void* t1=arrayPtr->get(bestIndex);
  19. T2* t2=static_cast<T2*>(t1);
  20. return t2;
  21. }
  22. };
  23. class Animal{public: int testAnimal=42;};
  24. class Dog:public Animal{public: int testDog=41;};
  25. int main() {
  26. User<Dog> user;
  27. MyArray<Animal> array;
  28. array.set(0,new Dog());
  29. user.arrayPtr = &array;
  30. Dog* dog=user.getTheBestT2();
  31. std::cout<<dog->testDog<<std::endl;
  32. std::cout<<dog->testAnimal<<std::endl;
  33. return 0;
  34. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
41
42