Сообщение от dimanche13
Да, это все понятно, что вы говорите, суть проблемы была - загнать любой тип данных в функцию, и проблема до сих пор не решена. А к какому типу принадлежит объект можно и select-ом узнать.
|
Ужос просто. Еще не решена.

Есть такое понятие - иерархия классов, оно подразумевает некий базовый класс (в идеале полностью абстрактный) от которого наследуются все остальные.
Проблема решается 2мя способами - перегружаемыми функциями или с помощью ООП.
1. Перегружаемых функций в БМ нет. Их можно сделать ручками, что неудобно. Этот вариант ты уже написал в самом первом посте. Все это гимор и останавливаться на этом не буду.
2. ООП. Тут есть где разгуляться:
2.1. Определение типов и приведение типов - уже описывали. Могу добавить что появился класс, который играет роль своеобразного указателя на класс объекта, что криво, но лучше что-то чем ничего. Ну и вообще основное его назначение не это, а отражения (reflection). И имя ему
TTypeId. И плавно переходим к
2.2. Отражения. С помощью
TTypeId можно определить класс и вызвать метод или обратиться к полю по имени. А также проверить есть ли нужное поле в классе, по его имени - Method
FindField:TField( name$ ). Это подойдет ну для любого класса.
2.3. Иерархия (ИМО самый правильный и переносимый способ). Наследуем все нужные для работы классы от базового, в котором прописываем нужные общие поля и методы (абстракция в БМ есть). Аргументом передаем базовый тип, с которым можно делать то, что нам нужно.
Пжалуста.
