Есть ли эффективный способ «перечислить» пространство имен в C ++? - PullRequest
1 голос
/ 01 июня 2011

Есть ли способ программно перечислить пространство имен и его членов в C ++?

У меня есть большая программа на C ++, которая использует несколько пространств имен.Я не знаком с базой кода и хотел бы определить, какие функции / классы / переменные связаны с какими пространствами имен.

Мой нынешний подход заключается в простом удалении по одному директив «using namespace» и проверке того, что ломается во время компиляции, но я предполагаю, что есть гораздо лучший способ достичь той же цели.

Ответы [ 5 ]

4 голосов
/ 01 июня 2011

Это невозможно в C ++.

Однако вы можете использовать внешние инструменты, такие как Doxygen , которые будут создавать документацию (HTML и другие форматы), в которой будут перечислены всечлены ваших пространств имен.

1 голос
/ 01 июня 2011

Вы можете начать с запуска Doxygen , чтобы сгенерировать индекс всех функций / классов / пространств имен, определенных в вашем проекте.Обязательно отредактируйте настройки для создания индекса для недокументированных символов.

1 голос
/ 01 июня 2011

Вы можете использовать интерфейс C ++ (например, Эльза ), чтобы выполнить работу за вас.

Также рассмотрите возможность использования хорошей IDE с функцией «Перейти к определению» (например, Microsoft Visual Studio).

1 голос
/ 01 июня 2011

К сожалению, самоанализ не является одной из главных особенностей C ++. Нет способа (на языке) сделать то, что вы хотите. Вам понадобится инструмент для анализа внешнего кода (то, что может проанализировать код и создать ссылку), чтобы сделать работу. Я использую cscope для большого анализа, но, насколько мне известно, он на самом деле не знает о пространствах имен, поэтому, вероятно, не самый подходящий инструмент для вас.

0 голосов
/ 01 июня 2011

Если вы знаете, какие пространства имен вы ищете, вы можете просто сгенерировать файл карты (g++ -Wl,-Map,MyMapFile.map).Затем найдите, например, MyNamespace:: в файле карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...