Como obter uma instância do modelo de classe fora da instrução if? (C ++)

Suponha que eu tenha um modelo de classe que tenha um membropData, que é umAxB array do tipo arbitrárioT.

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 a instância Xarray é construída dentro de uma instrução if, não posso usá-la em nenhum outro lugar. Eu tentei fazer um ponteiro antes das instruções if, mas como o tipo do ponteiro é desconhecido nesse ponto, eu não tive sucesso.

Qual seria a maneira correta de lidar com esse tipo de problema?

questionAnswers(4)

yourAnswerToTheQuestion