C # и Java-программы могут знать о своих собственных классах, поскольку среды выполнения .NET и Java обеспечивают отражение , что, в общем, позволяет программе иметь информацию о своей собственной структуре (как в .NET, так и в. Java, эта структура оказывается в терминах классов).
Нет способа позволить себе рефлексию, не полагаясь на среду выполнения, потому что программа не может быть самоосознаваемой сама по себе *. Но если выполнение вашей программы управляется средой выполнения, тогда программа может иметь информацию о себе из среды выполнения. Поскольку C ++ скомпилирован с собственным, неуправляемым кодом, вы не можете позволить себе отражение в C ++ **.
...
* Ну, нет никаких причин, почему программа не могла прочитать свой собственный машинный код и «попытаться сделать выводы» о себе. Но я думаю, что это то, что никто не хотел бы делать.
** Не совсем точно. Используя ужасные хаки на основе макросов, вы можете достичь чего-то похожего на отражение, если ваша иерархия классов имеет единый корень. MFC является примером этого.