Между делом разобрался со сравнением в генериках, а также с ошибкой внутри компилятора. Что касается сравнения, то всё действительно через задницу делается, однако много кода писать не приходится: всё, что нужно для общего случая, реализовано в RTL. Ну а ошибка... Как выяснилось, она возникает, если в интерфейсной части модуля, где определён генерик, определяется тип-указатель на что-нибудь. Сам этот модуль транслируется без ошибок, но компилятор валится при трансляции первого же модуля, использующего этот генерик, даже если тип-указатель к генерику никакого отношения не имеет. Ну а обход понятно какой: не определять в интерфейсной части модуля с определением генерика никаких типов-указателей. В том случае, когда указатели нужны для реализации самого генерика (например, двухсвязный список или там двоичное дерево), внутри генерика приходится использовать нетипизированные указатели, ну а в разделе реализации, в коде самих методов генерика, извращаться, хотя и не очень сильно. В общем, русские программисты индусов завсегда победят :)
|