Giả sử tôi có một mẫu lớp có thành viên pData
, là một mảng của loại đơn vị T
.Làm cách nào để lấy mẫu của mẫu lớp ra khỏi câu lệnh if? (C++)
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.
}
Ví dụ Xarray được xây dựng bên trong câu lệnh if, tôi không thể sử dụng nó ở bất kỳ nơi nào khác. Tôi đã cố gắng tạo một con trỏ trước các câu lệnh if nhưng khi kiểu con trỏ không được biết tại thời điểm đó, tôi đã không thành công.
Điều gì sẽ là cách thích hợp để giải quyết vấn đề này?
Không có câu trả lời "rõ ràng" nào vì C++ được nhập tĩnh. Bạn không thể nhắc người dùng cho một loại và sau đó tạo loại đó và sử dụng nó ở nơi khác - bạn phải biết loại tại thời gian biên dịch! Một kỹ thuật thường giải quyết tình huống này là "loại tẩy xoá", nhưng yêu cầu * bạn * chỉ định một số yếu tố chung mà tất cả các loại của bạn phải có và chỉ giao diện thông qua phần tử chung đó (ví dụ: "có thể in"). –
Ở đây, [this] (http://stackoverflow.com/questions/1984492/runtime-determine-type-for-c) có thể giúp bạn. –