Как получить экземпляр шаблона класса из оператора if? (C ++)

Предположим, у меня есть шаблон класса, в котором есть членpData, который являетсяAxB массив произвольного типаT.

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.
}

Поскольку экземпляр Xarray создается внутри оператора if, я не могу использовать его где-либо еще. Я пытался создать указатель перед операторами if, но так как тип указателя неизвестен, у меня ничего не получилось.

Что было бы правильным способом решения этой проблемы?

Ответы на вопрос(4)

Ваш ответ на вопрос