Здравствуйте, Владислав Юдин, Вы писали:
ВЮ>Статья:
ВЮ>Использование метаданных в программах на языке C++Автор(ы): Владислав Юдин
Дата: 22.05.2005
Цель данной статьи — показать, что метаданные это мощный механизм, требующий выделения в отдельный компонент, который хотелось бы видеть в стандартной библиотеке С++.
Сейчас прочитал статью два раза. Первый раз -- бегло, по диагонали. Ничего не понял. Второй раз внимательнее, начал что-то понимать, но к средине статьи опять понимание куда-то исчезло. Посему решил высказать свое первое впечатление.
Сама статья, имхо, очень тяжело читается. В основном, это сплошной навороченный шаблонный код, местами разбавленный односложными фразами, слабо проясняющими назначение кода и его смысл. Имхо, это больше похоже на результат прохода doxygen-а по самописной библиотеке, чем на попытку объяснить полезность метаинформации на шаблонах C++.
ВЮ>Аннотация:
ВЮ>Цель данной статьи — показать, что метаданные это мощный механизм, требующий выделения в отдельный компонент, который хотелось бы видеть в стандартной библиотеке С++.
Имхо, удалось показать, что метаданные на шаблонах это слишком мощный (я бы даже сказал overkill) механизм. Что-то на нем очень круто как-то делается. Только вот что делается, почему это делается именно так, и стоило ли это делать именно так -- для меня остается загадкой. Вот серьезно, я не понял, почему на примере сериализации структур делается вывод о полезности метаинформации. Лично у меня приведенный код не вызывает желания им пользоваться, даже в виде вот такого макросного описания:
META(SPoint, 2)
ATTR_TYPES AVersion ATTR_VALUES 3 ATTR_END
META_ENTRY(0)
ATTR_TYPES AName, AXMLAttribute ATTR_VALUES "x", true ATTR_END
META_ENTRY_INFO(int, x)
META_ENTRY(1)
ATTR_TYPES AName ATTR_VALUES "y" ATTR_END
META_ENTRY_INFO(int, y)
META_END
Поэтому, если задачей было показать необходимость подобного механизма в стандартной библиотеке C++, то, имхо, эта задача достигнута не была. Чесно говоря я вообще не понял, что за компонент должен быть в стандарной библиотеке и что этот компонент должен делать.
... << RSDN@Home 1.1.4 stable rev. 510>>