Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

Можно ли у произвольного рекорда узнать названия полей и их типы?   Найти похожие ветки 

 
Kerk ©   (2008-02-11 13:07) [40]


> DiamondShark ©   (11.02.08 12:11) [35]
> Sandman25   (11.02.08 12:25) [38]

Осторожнее, сейчас он вам про люмпенов расскажет :))


 
Sandman25   (2008-02-11 13:10) [41]

Kerk ©   (11.02.08 13:07) [40]

Главное, чтобы на национальность не перешел :)


 
Anatoly Podgoretsky ©   (2008-02-11 13:22) [42]

> Dib@zol  (11.02.2008 12:55:39)  [39]

Ненависти?
Много о себе думаешь!


 
ketmar ©   (2008-02-11 15:48) [43]

>[39] Dib@zol © (2008-02-11 12:55:00)
какой ненависти? здорового смеха.

---
Understanding is not required. Only obedience.


 
Семеныч   (2008-02-11 16:29) [44]

И правда - че налетели на парня? Ну, неточно он выразился, пусть даже и ошибся, пусть даже и не знает чего-то - так объясните, поправьте... если в лом - просто промолчите... а при чем тут куча в углу?

Странно... неужто и в жизни общение на том же уровне? Вряд ли ведь.


 
antonn ©   (2008-02-11 16:35) [45]

мдя... все умные, остальные дураки, поэтому можно плюнуть в собеседника фразой, кратко характеризующее его умственные способности, и лишь немного говорящей, что автор не прав (просто не прав, а не где именно неправ и почему неправ). Продолжайте в том же духе, хамье.


 
Palladin ©   (2008-02-11 16:36) [46]

а я за свободу слова!


 
Игорь Шевченко ©   (2008-02-11 17:16) [47]


> а я за свободу слова!


Я тоже! Но не всякого...


 
Palladin ©   (2008-02-11 17:18) [48]

так в том то и дело, я еще и за рамки приличия! :)


 
Ins ©   (2008-02-11 17:49) [49]


> И правда - че налетели на парня? Ну, неточно он выразился,
>  пусть даже и ошибся, пусть даже и не знает чего-то - так
> объясните, поправьте... если в лом - просто промолчите..
> . а при чем тут куча в углу?


Поддерживаю. Уверен, что большинство посетителей форума в свои 16 лет были далеки даже до этого уровня. Я уж не говорю просто про желание учится.


 
Игорь Шевченко ©   (2008-02-11 17:56) [50]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
TUser ©   (2008-02-11 19:01) [51]

таскай с собой исходники и парсь. Или используй класчсы и RTTI.


 
@!!ex ©   (2008-02-11 19:52) [52]

> [14] Dmitry S ©   (11.02.08 10:32)

Это передача указателя на память содержащюю данные рекорда, а я просил рекорд. Зачем нам данные?


 
Ins ©   (2008-02-11 21:12) [53]


> Это передача указателя на память содержащюю данные рекорда,
> а я просил рекорд.


А какая разница? Мы когда передаем строки - тоже передаем указатель, когда объекты - тоже. Передаем параметр по ссылке (var) - тоже. Кстати, помощью var можно можно объявить процедуру с нетипизированным параметром и передавать туда что угодно, см. например FreeAndNil. Так что не суть...


 
Sapersky   (2008-02-11 21:47) [54]

Для того, чтобы решить вашу задачу, доджны соблюдаться два условия:
1. Для рекордов должна генерироваться RTTI, содержащая информацию о ее полях и их типах.
2. Должна существовать возможность, имея ссылку на рекорд в памяти, получить ссылку на соответствующую ей RTTI.
Для рекордов в Delphi ни одно из этих условий не выполняется


Для рекордов, содержащих типы с управляемым временем жизни, эти условия отчасти выполняются. Компилятору приходится хранить некую "внутренюю RTTI", дабы корректно их инициализировать/копировать/финализировать. Получить эту RTTI можно, но она весьма лаконична - хранится описание ТОЛЬКО managed-полей. Так что, хотя в общем случае задача действительно не решаема, но в частном можно, например, сделать все поля строками или вариантами (на что, вероятно, намекали в [10]). Неэффективно? Дык, моё дело предложить... :)

Игорь Шевченко ©   (11.02.08 17:56) [50]
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


"С другой стороны, иногда можно встретиться с грубостью и вызовом, не имеющими никаких видимых оснований. Обратная сторона этой медали в том, что такая реакция является вполне приемлемой формой постановки на место действительных грубиянов, - мы отсекаем их недостойное поведение остро отточенным словесным скальпелем".

У меня сложилось впечатление, что в новейшей истории Дельфимастера примеров, когда грубить начинает именно задающий вопрос... вряд ли, конечно, совсем нет, но раз в 10 меньше, чем противоположных.
Видимо, грубостью теперь считается уже сам факт задания вопроса: как посмел не воспользоваться хелпом/гуглем? как посмел не знать тривиальных вещей? как посмел не родиться старым и мудрым? короче, ты виноват уж тем, что хочется мне кушать.
Если вы считаете такой подход нормальным - не надо прикрываться ссылками на мануалы для "новичков с  гиперчувствительной душой". Следует честно отвечать всех возмущённым: этот форум существует для развлечения кучки ганнибалов-лектеров, которые каждого встречного готовы располосовать "остро отточенным словесным скальпелем".
Ну или цитировать следующий после скальпелей абзац.


 
VirEx ©   (2008-02-11 22:05) [55]

Удалено модератором
Примечание: Offtopic


 
ketmar ©   (2008-02-11 22:14) [56]

>[54] Sapersky (2008-02-11 21:47:00)
>как посмел не воспользоваться хелпом/гуглем?

ествственно. за это надо бить, и больно. если неко ленится потратить своё время на ковыряние в хэлпе, но не ленится задать совершенно идиотский вопрос — я лично начинаю сожалеть, что правилами запрещён мат.

тем более, в очень многих «грубых» постах заключается ответ на вопрос (или направление для поиска). по крайней мере я обычно отвечаю именно так. тут уж пардон — если вопрошающему лениво читать справку/гугль, то мне лениво разжёвывать, я тоже желаю получить удовольствие путём «ответа намёком». или развлекаться за чужой счёт позволено только «несчастным детям-недоучкам»?

---
Understanding is not required. Only obedience.


 
Ins ©   (2008-02-11 22:14) [57]


> Для рекордов, содержащих типы с управляемым временем жизни,
> эти условия отчасти выполняются. Компилятору приходится
> хранить некую "внутренюю RTTI", дабы корректно их инициализировать/копировать/финализировать.
> Получить эту RTTI можно, но она весьма лаконична - хранится
> описание ТОЛЬКО managed-полей. Так что, хотя в общем случае
> задача действительно не решаема, но в частном можно, например,
> сделать все поля строками или вариантами (на что, вероятно,
> намекали в [10]). Неэффективно? Дык, моё дело предложить...
> :)


Да, я в курсе. В юните System есть тип TFieldTable, который хранит информацию о финализируемых полях структуры. Используется в Dispose, а также подобная информация хранится в InitTable классов. Таким образом, когда экземпляр класса уничтожается, он финализируется подобно record-у. Правда имя поля уже не вытащить никак... И второе условие не выполняется, но можно обойти - указатель на структуру TFieldTable также передавать в функцию. Это если тип record-а известен на этапе компиляции. Иначе - увы. :(


 
ketmar ©   (2008-02-11 22:31) [58]

>[57] Ins © (2008-02-11 22:14:00)
>Это если тип record-а известен на этапе компиляции. Иначе — увы. :(

отчего же? если обязать непосредственно перед вызовом функции делать New() и Dispose(), а внутри самой функции глянуть адрес возврата и проанализировать предыдущий асм-код, то можно украсть у Dispose() кое-что.

зыж хихик.

---
Understanding is not required. Only obedience.


 
Семеныч   (2008-02-12 00:57) [59]

> ketmar ©   (11.02.08 22:31) [58]

Вот видишь? Ведь можешь, когда захочешь.
:o)


 
Германн ©   (2008-02-12 00:59) [60]


> Sapersky   (11.02.08 21:47) [54]


> У меня сложилось впечатление, что в новейшей истории Дельфимастера
> примеров, когда грубить начинает именно задающий вопрос.
> .. вряд ли, конечно, совсем нет, но раз в 10 меньше, чем
> противоположных.
> Видимо, грубостью теперь считается уже сам факт задания
> вопроса

А я собс-но и не заметил какой-то грубости допущенной к автору вопроса. Были некие претензии к одному из ответивших (может слишком резкие, может нет). А к собственно к автору их не было, за исключением, может быть моего P.P.S. в [7].  А что мне еще оставалось? Если на вполне спокойные и адекватные ответы автору [1], [3] и [4] последовали замечания автора [2] и [5]. Так кто же всё-таки хам?


 
Германн ©   (2008-02-12 01:04) [61]


> Семеныч   (12.02.08 00:57) [59]

Дык ведь Дарк всегда (или почти всегда) знает чего он хочет. И всегда (или почти всегда) знает что он может. Остальные варианты входят в множество описанное в тосте про козу и дом. (с) "Кавказская пленница"


 
Семеныч   (2008-02-12 01:29) [62]

> Германн ©   (12.02.08 00:59) [60]
> Так кто же всё-таки хам?

Есть предложение, подкупающее своей новизной и оригинальностью - отказаться от решения этого важнейшего вопроса. Навсегда. И всем.

Ну, всем, конечно, не получится - но хотя бы тем, кто себя уважает и считает умными.

Может, тогда и сам вопрос потихоньку исчезнет? Ведь многие же хотят себя уважать и считать умными?

Если не все...
:о)

> Германн ©   (12.02.08 01:04) [61]
> Дык ведь Дарк всегда (или почти всегда) знает чего он хочет.

Всегда этого не знает никто. Даже сыны юристов.

А Дарк еще и сам от себя пытается скрывать... на полпути он еще... от NOBISCUM уже ушел, а к VOBISCUM еще не пришел... хотя идет потихоньку.

И придет. А куда ему с подводной лодки деваться-то?
:о)


 
ketmar ©   (2008-02-12 01:45) [63]

>[62] Семеныч (2008-02-12 01:29:00)
>от NOBISCUM уже ушел

с чего ты так решил? с того, что я подпись сменил? с эгрегором я не расплевался и вполне комплементарен.

>на полпути он еще
это вообще классно. у бесконечного пути есть чёткая половина? O_o

---
Understanding is not required. Only obedience.


 
имя   (2008-02-12 02:01) [64]

Удалено модератором


 
Семеныч   (2008-02-12 02:05) [65]

> ketmar ©   (12.02.08 01:45) [63]

Во... я ж говорю - сам от себя скрываешь. А ты взял - да и подтвердил.
:о)


 
ketmar ©   (2008-02-12 02:32) [66]

>[65] Семеныч (2008-02-12 02:05:00)
кто на ком стоял? O_o

---
Understanding is not required. Only obedience.


 
Германн ©   (2008-02-12 07:07) [67]


> Семеныч   (12.02.08 01:29) [62]
>
> > Германн ©   (12.02.08 00:59) [60]
> > Так кто же всё-таки хам?
>
> Есть предложение, подкупающее своей новизной и оригинальностью
> - отказаться от решения этого важнейшего вопроса. Навсегда.
>  И всем.
>
>

Не возражаю. Если Sapersky тоже согласен. Или он Семеныч?


 
Sapersky   (2008-02-12 14:37) [68]

В смысле, априори считаем, что хамов среди присутствующих вообще нет, пока кто-то явно не продемонстрировал обратное? Cогласен.
Выдвигаю схожее предложение - априори считать, что среди присутствующих нет идиотов. Это я по поводу [4].
"Желание странного" - это не идиотизм. Тем более что, как я писал в [54], в частном случае это желание осуществимо (с поправкой - имена полей получить нельзя, только типы).
Ещё рискну напомнить, что подобное желание высказывала ваша любимая Рипли :)

отчего же? если обязать непосредственно перед вызовом функции делать New() и Dispose(), а внутри самой функции глянуть адрес возврата и проанализировать предыдущий асм-код, то можно украсть у Dispose() кое-что.

Ничуть не сомневаюсь в способности Ins"а разобраться во всём самостоятельно, но мне в своё время здесь открытым текстом сказали (к сожалению не помню, кто), что это функция TypeInfo() :)
Ещё, чтобы не изобретать каждому индивидуальный велосипед, могу выложить свои наработки по внутренней RTTI.


 
ketmar ©   (2008-02-12 14:41) [69]

>[68] Sapersky (2008-02-12 14:37:00)
таки покажи. если у записи можно получить любое поле в рантайме — первый скажу: «крут он, и я перед ним сынок». всё возможно, всё вероятно. я думаю, что нельзя, но могу и ошибатся.

---
Understanding is not required. Only obedience.


 
Ins ©   (2008-02-12 15:19) [70]


> Ничуть не сомневаюсь в способности Ins"а разобраться во
> всём самостоятельно, но мне в своё время здесь открытым
> текстом сказали (к сожалению не помню, кто), что это функция
> TypeInfo() :)


TypeInfo тоже можно использовать только с определенным на этапе компиляции параметром.


> Ещё, чтобы не изобретать каждому индивидуальный велосипед,
>  могу выложить свои наработки по внутренней RTTI.


А что в них?


 
Sapersky   (2008-02-12 16:22) [71]

таки покажи. если у записи можно получить любое поле в рантайме

А где я писал про любое? Вроде везде оговаривался, что только для частного случая с managed(c управляемым временем жизни)-полями.

TypeInfo тоже можно использовать только с определенным на этапе компиляции параметром.

Разумеется, нельзя TypeInfo(переменная), но можно TypeInfo(тип).
Для написания независимых от типа функций это достаточно - можно просто передавать в них TypeInfo отдельным параметром, так же как это сделано в стандартных вроде DynArraySetLength (обычно используемая с дин. массивами SetLength - magic-обёртка для DynArraySetLength, TypeInfo при этом подставляет компилятор).

А что в них?

Решение классической проблемы новичков (запись рекорда c полем String в поток).
Впрочем, это полезно не только новичкам - иногда нужно быстро сбросить какой-то массив в файл, не особо задумываясь о его содержимом - длинные там строки, короткие... на серьёзную систему сериализации это решение, конечно, не тянет из-за большого кол-ва ограничений.
http://sapersky.narod.ru/files/TypInfoEx.rar
Пардон за жуткую мешанину русского и английского в комментариях.


 
ketmar ©   (2008-02-12 16:29) [72]

>[71] Sapersky (2008-02-12 16:22:00)
>А где я писал про любое?

значит, я неверно понял. однако в [0] требовали все поля. %-)

---
Understanding is not required. Only obedience.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.007 c
15-1202828471
Koha_San
2008-02-12 18:01
2008.03.23
BDS 2007 на фрейм ворк какой версии, 2-й или 1-й


15-1202440145
Slider007
2008-02-08 06:09
2008.03.23
С днем рождения ! 7 февраля 2008 четверг


2-1203931873
md10
2008-02-25 12:31
2008.03.23
как переменной приравнять строку содержащую апостраф


2-1203535697
Leha1987
2008-02-20 22:28
2008.03.23
Оптимизация


15-1202687643
Dmitry S
2008-02-11 02:54
2008.03.23
Визуальный редактор HTML на HTML





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский