Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Что такое динамический класс, как создать в С++?


Автор: barbocc 26.1.2011, 16:32
Доброго времени суток!
Нужна помощь в терминологии.
Что есть динамический класс, как его релизовать в C++, зачем он нужен?

Автор: baldina 26.1.2011, 17:38
Динамический класс имеет изменяемый (во время выполнения) набор членов и методов. Присутствует в языках с динамической типизацией, например JavaScript.
В принципе на вопрос "зачем он нужен" можно ответить так - для того, что бы выделить особенности конкретного объекта среди других (того же типа). В С++ не поддерживается (С++ имеет статическую типизацию), С++ имеет другие парадигмы для аналогичных целей.

Требуемое поведение (изменение списка переменных в классе и работа с ними по имени) в С++ можно реализовать например при помощи отображений. В любой реализации будет ряд технических проблем (например, если переменные должны быть произвольного типа), более или менее успешно решаемых (например для решения проблемы типа можно применить boost::any)
Код

class Foo {
 std::map<std::string, boost::any> map;
 public:
   boost::any& operator[](const std::string& key) { return map[key]; }
};

С функциями аналогичное решение и аналогичные проблемы.

Автор: barbocc 26.1.2011, 17:49
Спасибо, хм... все понятно и просто, но нужен boost. А через шаблоны это можно как-нибудь реализовать?

Автор: triclosan 26.1.2011, 17:57
Цитата(baldina @  26.1.2011,  17:38 Найти цитируемый пост)
С функциями аналогичное решение и аналогичные проблемы. 

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

Автор: baldina 26.1.2011, 18:19
triclosan, как, используя виртуальные функции, добавить новую функцию объекту (не классу!)?

Автор: borisbn 26.1.2011, 18:23
Цитата(barbocc @  26.1.2011,  17:49 Найти цитируемый пост)
А через шаблоны это можно как-нибудь реализовать?

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

Цитата(barbocc @  26.1.2011,  17:49 Найти цитируемый пост)
все понятно и просто, но нужен boost

во-первых, тоже мне бином Ньютона... а какая проблема поставить ?
во-вторых, можешь написать свой класс any или variant или ... назови как хочешь и делать как предложил 
baldina

Автор: baldina 26.1.2011, 18:25
Цитата(barbocc @  26.1.2011,  17:49 Найти цитируемый пост)
А через шаблоны это можно как-нибудь реализовать? 

ага.
http://www.usenix.org/publications/library/proceedings/usenix98/full_papers/hjalmtysson/hjalmtysson.pdf

Автор: barbocc 26.1.2011, 18:39
Всем спасибо smile 
Тему закрываю)

Автор: baldina 26.1.2011, 18:42
понятно, через шаблоны можно только функционал добавить.
вот http://forum.vingrad.ru/forum/topic-311688.html изобретают сложное и красивое, есть там и на эту тему

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