Автор: Sergey Teplyakov

В данный момент я работаю над переводом одного старого проекта, написанного под .Net Framework 1.1 на .Net Framework 3.5. При этом одной из задач является переход с синтаксиса Managed C++, на синтаксис C++/CLI.

Кода не много, поэтому над процессом автоматизации такого перехода я не думал, но сегодня, переводя очередной набор классов, решил таки посмотреть, чем может помочь редактор Visual Studio в вопросах поиска и замены кода.

Итак, задача: переделать свойства с синтаксиса Managed C++ в синтаксис C++/CLI.

Синтаксис свойства на Managed C++:
__property int get_EventType() { return eventType_, }

Синтаксис свойства на С++/CLI:

property int EventType { int get() { return eventType_, } }

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

Шаблон для поиска:

__property:b+{.#}:b*\*@:bget_{:w}\(\):b*(\n*:b*)\{\n*:b*{.*,}:b*\n*:b*\}

Шаблон для замены:

property \1 \2 { \1 get() { \3 } }

Синтаксис регулярных выражений в Visual Studio несколько отличается от общепринятого, но это не слишком важно, т.к. идея остается той же и в msdn прекрасно описаны особенности.

Теперь, запустив в Visual Studio механизм Find & Replace мы будем заменять свойства вида:

__property int get_EventType() { return eventType_, }

Или

__property int get_EventType()

{

return eventType,

}

На свойства вида:

property int EventType { int get() { return eventType, } }

Как правильно писал Джон Роббинс, разработчики очень часто плохо отзываются о своих пользователях, поскольку те не читают документацию и слабо используют функционал их приложений, но сами разработчики в этом плане не так уж и далеки от своих пользователей, когда речь касается об использовании функционала среды разработки. Visual Studio содержит множество функций и инструментов, способных существенно упростить жизнь каждому разработчику, но мало кто из них (из нас) считает нужным изучать подобные возможности. Функция Find & Replace не является исключением. Представленный шаблон для преобразования синтаксиса свойств не претендует на полноту, он подходит под тот формат записи, который применяется у меня, но возможно потребует некоторых изменений для вас. Но я и не хотел сделать инструмент, подходящий на все случаи жизни, а, скорее, продемонстрировать возможности инструмента, который всегда рядом и вполне может помочь для решения повседневных задач кодирования.

Помогла статья? Оцените её!
0 из 5. Общее количество голосов - 0
 

You have no rights to post comments

Дмитрий Крикунов

Публикую статьи, обучающие курсы и новости по программированию: алгоритмам, языкам (С++, Java), параллельному программированию, паттернам и библиотекам (Qt, boost).