Автоматически переписывать C++11 auto ключевое слово в производные типы
Может быть странный вопрос, но есть ли какое-либо программное обеспечение, которое, имея кучу кода на C++11, извлекает все типы автоматически типизированных переменных и переписывает код с этими производными типами? А также для списков инициализаторов?
Причина в том, что мы хотели бы предоставить обратно совместимую версию нашего кода (не на C++11), в основном для переносимости с osx. Автопечатание и списки инициализаторов - это те функции, которые мы используем чаще всего, поскольку они делают код намного более читабельным, но удаление их вручную не требуется. Так как это на самом деле то, что компилятор делает с автоматически типизированными переменными, это не кажется слишком надуманным?
3 ответа
Посмотрите на BOOST_AUTO и / или BOOST_TYPEOF
- http://www.boost.org/doc/libs/1_48_0/doc/html/typeof/refe.html
- http://www.boost.org/doc/libs/1_48_0/doc/html/typeof/refe.html
Вы могли бы заменить
auto x = foo();
с
BOOS_AUTO(x, foo());
Если вы хотите "управлять" типом decltype, вам придется прибегнуть к BOOST_TYPEOF. Обратите внимание, что оба макроса имеют несколько вариантов, о которых вы захотите узнать больше.
Если вы можете использовать Boost, то вы можете посмотреть на boost:: typeof. Это не будет делать то, что auto
делает, но, в большинстве случаев, он может быть автоматически заменен поиском regex-with-captures.
Похоже, функция для плагина рефакторинга для Eclipse CDT (я действительно предлагал это своим студентам некоторое время назад). Может быть, в следующем семестре я найду команду для создания такой. Однако информация Eclipse CDT может быть недостаточно хорошей, чтобы всегда определять правильные вещи.
Для некоторых списков инициализаторов, например, тех, которые заполняют вектор, boost::assign может быть заменой. Наша инфраструктура Mockator для Mockator использует их для C++03 вместо списков инициализаторов в C++11.
Вы не должны бояться библиотек Boost, по крайней мере, тех, которые поставляются только для заголовков. Те, у которых есть отдельные части библиотеки, могут быть немного трудны для правильной настройки (ситуация с сборкой улучшилась в последнее время).