TList is designed to hold pointers or anything that can be casted to pointer. Types larger than 4 bytes can't fit into array of pointer that is used in TList to hold data.

AFAIK you should code whole class from scratch and use array of _T to hold data.