Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > reflection (отображение)


Автор: null56 12.3.2010, 15:33
Всем привет
Наткнулся на интересную статью в википедии и заинтересовался загадочным для меня словом reflection
http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29
Как я понял по контексту статьи, это изменение собственного кода самим приложением? или я ошибаюсь

Хотел бы задать вопрос:
1) что же это действительно такое?
2) где - нибудь применяется ли?
3) примерчики элементарные не могли бы скинуть?

заранее благодарен за помощь

Автор: Леопольд 12.3.2010, 15:41
Думаю, можно заявить, что в С++ нет интроспекции. Если, конечно, не считать за таковую RTTI.

Автор: chaos 12.3.2010, 15:49
null56, как правило подобное есть в языках работающих под VM например Java & C#
для ++ никогда подобного не слышал, хотя нет ничего невозможного. только тут asm надо подключать

Автор: null56 12.3.2010, 15:54
chaos, ну про скриптовые понятно, а вот цитата из вики
Код

... и гораздо менее используются в языках программирования с объявляемыми типами и/или статическими типами, таких как Java и Си.


Добавлено через 5 минут
... я это к тому, а какие возможности в чистом си?

Автор: chaos 12.3.2010, 16:00
Цитата(null56 @ 12.3.2010,  12:54)
chaos, ну про скриптовые понятно, а вот цитата из вики
Код

... и гораздо менее используются в языках программирования с объявляемыми типами и/или статическими типами, таких как Java и Си.

Java тоже понятно. Периодически там пользую reflection. а вот про С ничего не могу скзать.

Хотя.....хотя нечто похожее(имхо) есть в Qt. Смотреть классы 
Код

/^QMeta.+/

Автор: GoldFinch 12.3.2010, 16:11
в С++ это например boost.fusion

вырожденный случай - это использование map<string,any> вместо struct,
т.е. использование типа данных у которого можно перечислить поля в рантайме

Добавлено через 1 минуту и 26 секунд
впринципе все можно реализовать на С, но путем невероятного числа строчек кода

Автор: mes 12.3.2010, 16:36
Цитата(null56 @  12.3.2010,  14:54 Найти цитируемый пост)
а какие возможности в чистом си? 

Цитата(GoldFinch @  12.3.2010,  15:11 Найти цитируемый пост)
впринципе все можно реализовать на С


вот придуманный на скорую руку пример на чистом си http://codepad.org/ePOsLzn8
smile


Автор: chaos 12.3.2010, 16:44
тут еще как мне кажется важно то, что в языках где это используется, тип есть объект

Автор: Леопольд 12.3.2010, 16:49
Цитата(null56 @  12.3.2010,  15:33 Найти цитируемый пост)
Как я понял по контексту статьи, это изменение собственного кода самим приложением?
Изменение - частный случай. Это может быть и анализ собственной структуры. 
В Python'е, например, можно добавлять/удалять поля класса или просто проверять что такое поле существует и т.д. и т.п.

Автор: GoldFinch 12.3.2010, 16:51
chaos, а что мешает в С++ тип сделать объектом?
наделай объектов "типов" и клонируй их при создании переменных

Добавлено через 2 минуты и 48 секунд
вобщем на С\С++ можно сделать все, кроме динамической оптимизации

но если сделать виртуальную машину, то можно будет сделать динамическую оптимизацию ее кода, хотя неизвестно есть ли в этом смысл %)

Автор: mes 12.3.2010, 17:36
Цитата(chaos @  12.3.2010,  15:44 Найти цитируемый пост)
важно то, что в языках где это используется, тип есть объект 

рефлексия к объектам прямого отношения не имеет, т.е рефлексии абсолютно безразлично ООП это или нет smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)