записи как Published поля
Модератор: Модераторы
записи как Published поля
Доброго времени суток.
Вопрос скорее риторический. Понадобилось мне возыметь несколько published полей, являющихся группами по 3 строки. Т.к. окромя такой группировки от поля ничего более не требуется, решил использовать запись и столкнулся со внезапной проблемой: published могут быть только поля-объекты либо то, что умещается в native int. http://www.freepascal.org/docs-html/ref/refsu38.html#x89-1110006.6.5 На резонный вопрос "какого банана?" гугл гордо молчит, а потрошить fpc я пока не готов.
Да, можно таки использовать не запись, а объект. Пока так и сделал, но меня гложет мысль о том, что я использую лишние несколько байт просто из-за реализации fpc. Не критично, но гложет.
Но все же, в чем проблема?
ps еще можно сериализовать, но как-то изврат
Вопрос скорее риторический. Понадобилось мне возыметь несколько published полей, являющихся группами по 3 строки. Т.к. окромя такой группировки от поля ничего более не требуется, решил использовать запись и столкнулся со внезапной проблемой: published могут быть только поля-объекты либо то, что умещается в native int. http://www.freepascal.org/docs-html/ref/refsu38.html#x89-1110006.6.5 На резонный вопрос "какого банана?" гугл гордо молчит, а потрошить fpc я пока не готов.
Да, можно таки использовать не запись, а объект. Пока так и сделал, но меня гложет мысль о том, что я использую лишние несколько байт просто из-за реализации fpc. Не критично, но гложет.
Но все же, в чем проблема?
ps еще можно сериализовать, но как-то изврат
ger0strat писал(а):но меня гложет мысль о том, что я использую лишние несколько бай
А не гложет мысль, что если бы можно было бы использовать record в качестве published, то пришлось бы работать со структурой неизвестной длины, содержащей поля, имеющие неизвестное смещение? Почему так - из-за блждь "оптимизации", разной для разных режимов компиляции, с вставлением разного рода мусора. А также будет соблазн туда сунуть разного рода скрытые указатели - т.е. строки и динамические массивы.
Кста:
whose size is less than or equal to a pointer,
ger0strat писал(а):published могут быть только поля-объекты либо то, что умещается в native int
Утверждения отнюдь не эквивалентны. В ангельском оригинале сказано, что published может быть то, что меньше или равно pointer. Указателя то есть. Где там native int?
published могут быть только поля-объекты либо то, что умещается в native int
Double емнип может быть публишед, такчто это не совсем верно.
Какой смысл в "записи как Published поля"?
Т.к. окромя такой группировки от поля ничего более не требуется
Для группировки в инспекторе?
SSerge писал(а):ger0strat писал(а):published могут быть только поля-объекты либо то, что умещается в native int
Утверждения отнюдь не эквивалентны. В ангельском оригинале сказано, что published может быть то, что меньше или равно pointer. Указателя то есть. Где там native int? :D Сам указатель (pointer), по этой логике, тоже может быть published.
Можете рассказать почему не компилится этот код?
Код: Выделить всё
{$MODE OBJFPC}
{$MODESWITCH AUTODEREF}
type
TFoo = class
private
P: Pointer;
published
property Group: Pointer read P;
end;
begin
end.
Код: Выделить всё
p.pas(8,27) Error: This kind of property cannot be published
Дож писал(а):Можете рассказать почему не компилится этот код?
Мог бы просто сказать, что чушь спорол и указатели в качестве published членов принципиально бессмысленны, потому запрещены.
SSerge писал(а):то пришлось бы работать со структурой неизвестной длины
Волков бояться - в лес не ходить. Для динамических массивов выход нашелся, почему не должен для записей. Смещения известны ибо есть packed.
SSerge писал(а):whose size is less than or equal to a pointer,
хватаем словарик и переводим: "размер которых меньше или равен размеру указателя"
native int, как и размер указателя определяется разрядностью системы (или компилятора). Собственно, разница в термине.
zub писал(а):Какой смысл в "записи как Published поля"?
такой же, какой и в published поле любого другого типа
Добавлено спустя 6 минут 46 секунд:
zub писал(а):Double емнип может быть публишед, такчто это не совсем верно.
вообще sizeof(double)=8, что вполне укладывается
>>вообще sizeof(double)=8, что вполне укладывается
нет, не укладывается. например на x86
>>такой же, какой и в published поле любого другого типа
и всетаки, какой?
нет, не укладывается. например на x86
>>такой же, какой и в published поле любого другого типа
и всетаки, какой?
zub писал(а):>>вообще sizeof(double)=8, что вполне укладывается
нет, не укладывается. например на x86
пока потестить не на чем, но подозреваю не все так просто)
что тут проверять?
sizeof(double)=8
sizeof(pointer)=4
sizeof(integer)=4
на x86
Сделано имхо для упрощения и унификации рантайм rtti вызовов. Никакого смысла в
для published секции нет. Тут лежит то что сериализуется "автоматом" и лежащее тут должно быть максимально простым
sizeof(double)=8
sizeof(pointer)=4
sizeof(integer)=4
на x86
Сделано имхо для упрощения и унификации рантайм rtti вызовов. Никакого смысла в
Т.к. окромя такой группировки от поля ничего более не требуется
для published секции нет. Тут лежит то что сериализуется "автоматом" и лежащее тут должно быть максимально простым
Ну то есть про размер они у себя в хелпе написали исключительно ради прикола?
не понял, о чем и к чему это было
ну да, объекты определенно проще устроены, чем записи. более того, записи сериализуются на раз.
полагаю пошел спор ради спора. тему можно закрывать
zub писал(а):Никакого смысла в
не понял, о чем и к чему это было
zub писал(а):Тут лежит то что сериализуется "автоматом" и лежащее тут должно быть максимально простым
ну да, объекты определенно проще устроены, чем записи. более того, записи сериализуются на раз.
полагаю пошел спор ради спора. тему можно закрывать
>не понял, о чем и к чему это было
Было это к тому что записи в published не нужны
>>ну да, объекты определенно проще устроены, чем записи. более того, записи сериализуются на раз.
Ничего "на раз" не сериализуется, темболее записи.
>>полагаю пошел спор ради спора. тему можно закрывать
Спора тут и небыло. Есть странное желание, непонимание зачем оно нужно и почему неработает))
Было это к тому что записи в published не нужны
>>ну да, объекты определенно проще устроены, чем записи. более того, записи сериализуются на раз.
Ничего "на раз" не сериализуется, темболее записи.
>>полагаю пошел спор ради спора. тему можно закрывать
Спора тут и небыло. Есть странное желание, непонимание зачем оно нужно и почему неработает))
