¿Cómo obtener una instancia de plantilla de clase fuera de la sentencia if? (C ++)

Supongamos que tengo una plantilla de clase que tiene un miembropData, que es unAxB matriz de tipo arbitrarioT.

template <class T> class X{ 
public:
    int A;
    int B;
    T** pData;
    X(int a,int b);
    ~X();        
    void print(); //function which prints pData to screen

};  
template<class T>X<T>::X(int a, int b){ //constructor
    A = a;
    B = b;
    pData = new T*[A];
    for(int i=0;i<A;i++)
        pData[i]= new T[B];
    //Fill pData with something of type T
}
int main(){
    //...
    std::cout<<"Give the primitive type of the array"<<std::endl;
    std::cin>>type;
    if(type=="int"){
        X<int> XArray(a,b);
    } else if(type=="char"){
        X<char> Xarray(a,b);
    } else {
        std::cout<<"Not a valid primitive type!";
    } // can be many more if statements.
    Xarray.print() //this doesn't work, as Xarray is out of scope.
}

Como la instancia de Xarray se construye dentro de una sentencia if, no puedo usarla en ningún otro lugar. Intenté hacer un puntero antes de las instrucciones if, pero como el tipo de puntero es desconocido en ese momento, no tuve éxito.

¿Cuál sería una forma adecuada de tratar este tipo de problema?

Respuestas a la pregunta(4)

Su respuesta a la pregunta