Я бы не использовал конструкцию class
, поддерживаемую языком.Если вам нужно что-то маленькое и гибкое, подумайте о написании struct
и реализации своих собственных v-table
с использованием указателей на функции.Примерно так же, как это делается, например, в ядре Linux.Обратите внимание, что объектно-ориентированное программирование может быть выполнено практически на любом языке, не обязательно на том, который его поддерживает.
Затем вы можете переключить указатель v-таблицы на лету и, возможно, выполнить некоторое realloc
, чтобы добавитьполя, обязательные для производного типа.
В конце концов вы можете упаковать все это в обычный class
, который не имеет динамических методов и просто делегирует все вызовы описанной внутренней структуре.Это не должно налагать никакой памяти или вычислительных затрат.
РЕДАКТИРОВАТЬ: На самом деле я думаю, realloc
это не путь.Это процедура, которая задействует основную операционную систему и требует переключения контекста.Почти всегда вызов copy
будет быстрее, если у вас уже выделен соответствующий блок памяти.Если вы заинтересованы в скорости, то, возможно, рассмотрите возможность реализации собственного управления памятью или использования одной из альтернативных реализаций, предоставляемых библиотеками, таких как boost.