#c #reflection
#c #отражение
Вопрос:
Я хочу написать программу, которая поддерживает несколько типов команд.
Чтобы сделать его универсальным и легко расширяемым для последующих новых команд, я хочу написать класс для каждой команды (со своей собственной обработкой) и вызвать базовый класс ‘command’ с функцией handler.
Я знаю, что в Java есть class class, который помогает с такой вещью — определять «в потоке» тип класса, с которым он имеет дело.
Имеет ли cpp аналогичный механизм? Если да, то что это такое и как мне его использовать?
Если нет, то что я могу сделать, чтобы его было легко расширять?
Большое спасибо.
Ответ №1:
Вы могли бы реализовать командный класс с помощью чисто виртуального метода.
http://www.exforsys.com/tutorials/c-plus-plus/c-pure-virtual-function-and-base-class.html
Ответ №2:
Хотя вы можете использовать Class class для определения потока в Java, лучше использовать полиморфизм — он делает класс открытым для расширения, не требуя модификации («O» в SOLID).
То же самое верно и в C . Вы могли бы использовать RTTI, но виртуальные методы позволяют расширять класс с помощью команд, не изменяя его.
Из «Шаблонов проектирования» Гамма и др.:
Ключом к этому шаблону является абстрактный командный класс, который объявляет интерфейс для выполнения операций. В своей простейшей форме этот интерфейс включает абстрактную операцию выполнения.
Ответ №3:
Вы можете использовать RTTI, но я предлагаю вам найти другой способ сделать это.