Num,
1. Это хак. Не факт, что будет работать на всех версиях. Ты затачиваешься на то, как компилятор хранит массив.
2. А что со статическими массивами?
ТС,
1. Low(), High() и Length() являются библиотечными функциями и реализованны хардкодом для текущей версии библиотеки и компилятора. Тебя же не смушает, что есть процедура writeln, у которой произвольное кол-во параметров, хотя ты подобную средствами самого языка создать не можешь (кстати, разработчики Delphi тоже не могут, именно поэтому мы имеем функцию Format с параметром array Of const).
2. Ну, если очень хочется без указания типа, то отдавай это на откуп компилятору. Т.е. пиши функцию с overload для каждого типа. Компилятор потом сам подставит нужную. Одна проблема - что делать для пользовательских типов и что делать, когда массив неизвестно чего передается из вне.
Как я говорил - проблема кардинально решается путем отказа от массивов и перехода на контейнеры. Я бы даже сказал - на generic-контейнеры. Т.е. наследуешь от стандартного generic-контейнера свой, дописываешь ему нужные тебе вещи и уже "рожаешь" свои классы от своего контейнеры с типизацией на этапе компиляции.
|