Форум: "Прочее";
Текущий архив: 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