позвольте мне немного рассказать вам, откуда возник этот вопрос. Я играл с SDK Serious Sam 2, шутера от первого лица, который работает на Serious Engine 2. Этот движок вводит нечто, называемое MetaData. Метаданные используются в движке для сериализации классов и возможности их редактирования в среде редактора (Serious Editor 2). Так, например, вместо:
class CSomeGameItem : CEntity
{
public:
int iHealthToGive;
}
Что не будет отображаться в редакторе, вы бы сделали:
meta ver(1) class CSomeGameItem : CEntity _("Some game item")
{
public:
meta int iHealthToGive; _("Amount of health to give")
}
Теперь, когда вы создаете уровень, вы можете вставить в свой уровень сущность «Некоторые игровые предметы» и отредактировать одно имеющееся у него свойство. Теперь я знаю, что Croteam (разработчики упомянутой игры и движка) используют дополнительный компилятор (Mdc, компилятор метаданных), чтобы вводить дополнительную информацию о классах и их переменных в файлы dll, чтобы сделать возможной эту систему метаданных. Кто-нибудь знает, как они это сделали?
Да, кстати, ключевые слова meta, ver () и _ () в своем коде # define'd to none, поэтому «нормальный» компилятор их игнорирует.