Тема: Масив вказівників на базовий шаблонний клас
"У головній функції створити масив M=10 вказівників на базовий клас А, які ініціалізуються адресою об’єкта одного із похідних класів. " 
По факту потрібно цей довгий код ініціалізації вказівників(див. внизу) запхати в цикл і зробити змінні a1, a2 .... елементами масиву. Проблема в тому що я не знаю як створити масив взазівників які вказують на різний тип даних. 
Типу:
A<??>* mas[10];Компілятор gcc 7.3.0
Ось код:
#include <iostream>
#include <typeinfo>
#include <ctime>
using namespace std;
template <class T>
class A {
private:
    T X;
public:
    virtual T Get() {
        return X;
    } 
};
class B : public A<int> {
private:
    int I;
public:
    B () {
        I = 0;
    }
    int Get() {
        return I;
    } 
};
class C : public A<float> {
private:
    float F;
public:
    C () {
        F = 0.1;
    }
    float Get() {
        return F;
    }
};
class D : public A<char> {
private:
    char H;
public:
    D () {
        H = '0';
    }
    char Get() {
        return H;
    }
};
int main() {
    const int M = 10;
    srand(time(NULL));
    B* b1 = new B;
    A<int>* a1;
    a1 = b1;
    D* d2 = new D;
    A<char>* a2;
    a2 = d2;
    C* c3 = new C;
    A<float>* a3;
    a3 = c3; 
    D* d4 = new D;
    A<char>* a4;
    a4 = d4;
    B* b5 = new B;
    A<int>* a5;
    a5 = b5;
    C* c6 = new C;
    A<float>* a6;
    a6 = c6; 
    C* c7 = new C;
    A<float>* a7;
    a7 = c7; 
    D* d8 = new D;
    A<char>* a8;
    a8 = d8;
    B* b9 = new B;
    A<int>* a9;
    a9 = b9;
    C* c10 = new C;
    A<float>* a10;
    a10 = c10; 
}P. S. Повне завдання якщо треба: 
На вершині ієрархії знаходиться базовий шаблонний клас
template <class T> class А;
який у захищеній частині містить оголошення значення X типу Т, а у відкритій
частині – віртуальний метод Get() отримання цього значення. 
Визначити N > 2 похідних класів з власними даними та методами, які утворюють поліморфічний
кластер на основі класу А. 
У головній функції створити масив M=10 вказівників
на базовий клас А, які ініціалізуються адресою об’єкта одного із похідних
класів. 
Тип створюваного об’єкта вибирається випадково з ієрархії класів (на
основі вбудованого генератора цілих випадкових величин з діапазону [0, N1]).
На основі механізму ідентифікації типів (клас type_info) визначити
назву класу, на який вказує кожен із елементів масиву вказівників.
Використати масив вказівників для виклику віртуальних методів