Автоматически переписывать c ++ 11 auto ключевое слово в производные типы - PullRequest
6 голосов
/ 29 февраля 2012

Может быть, странный вопрос, но есть ли какое-либо программное обеспечение, которое, имея кучу кода c ++ 11, извлекает все типы автоматически типизированных переменных и переписывает код с этими производными типами? А также для списков инициализаторов?

Причина в том, что мы хотели бы предоставить обратно совместимую версию нашего кода (не на C ++ 11), в основном для переносимости с osx. Автопечатание и списки инициализаторов - это те функции, которые мы используем чаще всего, поскольку они делают код намного более читабельным, но удаление их вручную не требуется. Поскольку именно это и делает компилятор с автоматически вводимыми переменными, он не кажется слишком надуманным?

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

Посмотрите на BOOST_AUTO и / или BOOST_TYPEOF

Вы можете заменить

 auto x = foo();

с

 BOOS_AUTO(x, foo());

Если вы хотите «управлять» типом decltype, вам придется прибегнуть к BOOST_TYPEOF.Обратите внимание, что у обоих макросов есть несколько вариантов, о которых вы захотите узнать больше о

2 голосов
/ 29 февраля 2012

Если вы можете использовать Boost, то вы можете посмотреть на boost :: typeof .Он не будет делать точно то, что делает auto, но в большинстве случаев он может автоматически заменяться поиском regex-with-captures.

1 голос
/ 28 июня 2012

Звучит как функция для плагина рефакторинга для Eclipse CDT (я действительно предлагал это своим студентам некоторое время назад).Может быть, в следующем семестре я найду команду для создания такой.Однако информация Eclipse CDT может быть недостаточно хороша, чтобы всегда определять правильные вещи.

Для некоторых списков инициализаторов, например, тех, которые заполняют вектор, boost :: assign может быть заменой.Наша инфраструктура mock-объектов Mockator использует их для C ++ 03 вместо списков инициализаторов в C ++ 11.

Вам не следует бояться библиотек Boost, по крайней мере, тех, которые поставляются только для заголовков,Те, у которых есть отдельные части библиотеки, могут быть немного трудны для правильной настройки (ситуация с сборкой улучшилась в последнее время).

...