Попробую угадать задачу. Есть некое поле (назовём его UserData), но у нас-то пользовательские данные boolean!
Решение 1. Прямое преобразование, невзирая на несовместимости типов.
someObj.UserData := TObject(true);
someBool := boolean(someObj.UserData);
+ Эффективнее всех.
− Запрещено разыменовывать.
Решение 2. Создать некий объект DummyObject. Обозначить nil=false, <>nil = true.
someObj.UserData := dummyObject;
someBool := (someObj.UserData <> nil);
initialization
dummyObject := TObject.Create;
finalization
dummyObject.Free;
end.
+ Достаточно эффективно, можно разыменовывать.
− Если в классе есть неотключаемое автоуничтожение UserData — облом!
Решение 3. Создать класс TBoolObject.
TBoolObject = class
public
Value : boolean;
// конструкторы опущу, деструктор не нужен
end.
someObj.UserData := TBoolObject(true);
someBool := (someObj.UserData as TBoolObject).Value;
+ Работает, когда в классе есть автоуничтожение UserData.
− Иначе — овчина не стоит выделки, тогда нам эти объекты придётся уничтожать самим.
Если же у вас тут экономия памяти и надо в одной памяти держать object или boolean, работает решение 4.
TObjBool = record
case integer of
0 : ( asObj : TObject );
1 : ( asBool : boolean );
end;
+ Очень эффективно.
− Программист сам должен следить за тем, что там: объект или буль.