Можно создавать мета-классы, однако C ++ не об этом, а о статически реализованных реализациях во время компиляции, а не о гибкости во время выполнения.
В любом случае, если вам нужны метаклассы с методами или просто метаклассы с данными, классы данных могут быть реализованы с помощью конструкций Boost, таких как boost :: any, а если вам нужны классы с методами, вы можете использовать boost: : bind для привязки методов к объекту, или вы можете реализовать их самостоятельно с помощью интерфейса с одной точкой входа, такого как COM-объекты.
Однако «настоящий» способ C ++ - это использование обобщений, чтобы все они могли быть определены во время компиляции для лучшей производительности.
Если честно, я видел очень мало систем, хотя я видел некоторые, которые действительно нуждаются в гибкости во время выполнения, в большинстве случаев объекты рождаются и умирают в одном классе, или, по крайней мере, достаточно, чтобы тратить 95% своей жизни. как один класс, когда они выходят из своей фабрики.
Так что во многих ситуациях приходится платить слишком много за мета-классы времени выполнения. Конечно, существует мнение, что это обеспечивает лучшую производительность для разработчиков, но во многих ситуациях каждая строка кода будет выполняться на оборудовании в несколько сотен миллионов раз больше, чем время, затрачиваемое на ее написание. Таким образом, вы можете думать о классах времени компиляции и времени исполнения как о предоплате или лизинге навсегда. Лично мне нравится платить авансом.