Как найти конструкторы перемещения в кодовой базе, используя grep или IDE?

Я хочу найти конструкторы перемещения в базе кода большого проекта C++. Простое сокращение "&&" не работает, потому что оно соответствует множеству "логических" и "операторов".

Любой способ grep точнее для конструкторов перемещения?

Любой способ поиска конструкторов перемещения с использованием Visual Studio (в Windows) или XCode (в Mac)?

1 ответ

Решение

Похоже, работа для регулярных выражений. В Visual Studio нажмите Ctrl + F. Во всплывающем окне поиска активируйте опцию "Использовать регулярные выражения" (или нажмите alt + E, когда строка поиска активна). Затем введите следующее выражение:

\b\w+\s*[\(]\s*(const)*\s*(volatile)*\s*\w+\s*[&][&]\s*[\)]

Он найдет любую строку вида:

class_name(class_name&&)
class_name(const class_name&&)
class_name(volatile class_name&&)
class_name(const volatile class_name&&)

как указано в:

http://en.cppreference.com/w/cpp/language/move_constructor

Выражение также работает, если между именем_класса, круглыми скобками и ключевыми словами, такими как const и т. Д., Есть любое количество пробелов.

Если вы хотите, чтобы он работал и для именованных переменных, например:

class_name(class_name&& variable_name)

достаточно немного его изменить:

\b(\w+)\s*[\(]\s*(const)*\s*(volatile)*\s*\1\s*[&][&]\s*\w*\s*[\)]

РЕДАКТИРОВАТЬ: В ответ на запрос OP, я изменил вышеупомянутое регулярное выражение таким образом, что теперь он использует обратные ссылки. "\1" означает "Найти то же выражение, которое было захвачено первым выражением, сгруппированным в скобках" - первое такое выражение - (\w+), которое является первым "class_name" в приведенных выше примерных конструкторах перемещения. Это гарантирует, что с обеих сторон этого парня будет одинаковая строка: '('. Подводя итог: одна дополнительная пара скобок, '\1' и волшебство происходит.

Интересно, что Microsoft не упоминает, что VS поддерживает обратные ссылки.

Более подробную информацию о регулярных выражениях в Visual Studio можно найти здесь:

http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx

Другие вопросы по тегам