2013-08-30 2 views
2

Есть ли способ поиска с помощью сценария bash (используя grep, awk, sed, ... тоже) для классов (или структур), наследующих данный базовый класс?Поиск классов C++, наследующих другой класс

я вызов, как в виду следующее:

./get_classes.sh 'CBaseClass' src/

Edit 1:

То, что я уже пробовал:

grep -r ':.*CBaseClass' src/

Это решение работает , но только при отсутствии новой строки между : и CBaseClass. Другая проблема заключается в том, что когда у вас есть два класса в том же заголовке, что и наследует CBaseClass, grep по умолчанию будет жадным совпадением (от кулака : до второго CBaseClass).

+0

Это своеобразный вопрос, я признаю ... почему бы не расширить свой SearchQuery на ': public' и сделать он выглядит только в файлах заголовков? Таким образом, вы сможете найти все классы, которые наследуются от этого, без фактического нахождения самого класса. –

+0

Да, это то, что я думал/пытался первым, но что вы делаете, если между ':' и 'public/protected/private CBaseClass' есть новые строки или другие классы? – Uroc327

+2

Вы можете изучить [libclang и Python] (http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/), чтобы на самом деле выполнить семантический поиск. – Angew

ответ

0

Вы хотите что-то вроде этого:

find src/ \(-name \*.h -o -name \*.cpp -o -name \*.cxx \) -exec egrep '(class|struct).*:.*public.*CBaseClass'{} \; -print 

выполнить при вызове get_classes.sh 'CBaseClass' src/

+0

Ну ... Прежде всего, спасибо! Но это в основном то же самое, что использовать 'grep -r src/*, {h, cpp, cxx}' (уже пробовал это, извините за нечеткое сообщение). Проблема с этим решением: он не находит класс, если между ':' и унаследованным классом есть новые строки или другие классы. – Uroc327

Смежные вопросы