不,AFAIK没有办法用RTTI来建立多维数组。但是,如果您使用的是Delphi 2010,您应该能够使用泛型,例如:
type
TRowData<T> = array of T;
procedure ReadMatrix<T>;
var
Matrix: array of TRowData<T>;
NumberOfRows: Cardinal;
NumberOfCols: Cardinal;
CurRow: Integer;
begin
NumberOfRows := 20; // not known until run time
NumberOfCols := 100; // not known until run time
SetLength(Matrix, NumberOfRows, NumberOfCols);
for CurRow := 0 to NumberOfRows do
FileStream.ReadBuffer(Matrix[CurRow][0], NumberOfCols * SizeOf(T)) );
end;
不过,这必须在课堂上进行
Delphi 2010 doesn't support standalone procedures with generic types
. 一旦你准备好了,你可以打电话
TWhateverClass.ReadMatrix<integer>
TWhateverClass.ReadMatrix<int64>
,
TWhateverClass.ReadMatrix<single>
另外,如果您有一个具有X维的多维数组,则可以将X length参数传递给SetLength,而不仅仅是一个参数。所以用一个电话
SetLength(Matrix, NumberOfRows, NumberOfCols)
在循环外部,而不是将每行分别初始化为相同的宽度。