LINUX.ORG.RU

[c++] [vim] плагин печатающий типы итераторов


0

1

В свободное время пишу потихоньку плагин для вима, который экономит мне несколько секунд, когда я набираю что-нибудь в духе

std::map<int, string>::const_iterator it = myMap.begin();

Работает следующим образом. Cтрока

it = myMap.begin();
набирается руками, потом нажимается CTRL+J. Плагин пытается определить тип myMap. Если ему это удалось, и типом является map<int, string> (например), то плагин считает, что it имеет тип map<int, string>::const_iterator, и строка превращается в
map<int, string>::const_iterator it = myMap.begin();
По второму нажатию CTRL+J тип меняется на map<int, string>::iterator

Сам плагин тут http://www.vim.org/scripts/script.php?script_id=3648

Видео как работает тут: http://www.youtube.com/watch?v=uTqnQEuUSL4

может быть кому-нибудь будет интересно

В C++0x это все будет не нужно. Да и сейчас на шаблонах можно реализовать вывод типов.

elverion ()

> который экономит мне несколько секунд, когда я набираю что-нибудь в духе

std::map<int, string>::const_iterator it = myMap.begin();


как вариант можно использовать C++0x и auto, который уже «работает» во всех более-менее известных компиляторах

aho ()
Ответ на: комментарий от elverion

Да я в курсе про auto, но в ближайшее время писать на C++0x (видимо) не буду.

dim-an ()
Ответ на: комментарий от elverion

Да и сейчас на шаблонах можно реализовать вывод типов.

Тем более, что в бусте оно есть - BOOST_AUTO.

Begemoth ★★★★★ ()
Ответ на: комментарий от elverion

>шаблонах можно реализовать вывод типов.

Как? Есть переменная m, имеющая тип map<int, string>. Как из этих 2 данных получить тип итератора map<int, string>::const_iterator для переменной?

anonymous ()

надо бы немного артиклями разбавить описание по сцылке.

anonymous ()

Для такой задачи как на видео можно и foreach-макрос написать, или взять готовый из буста.

elverion ()

std::map<int, string>::const_iterator it = myMap.begin();

Вообще подобный код может указывать на то, что следует больше использовать алгоритмы из стандартной библиотеки, но тут уже от кода завивсит.

Begemoth ★★★★★ ()
Ответ на: комментарий от anonymous

Простите мой французский. Я конечно постараюсь, но может стать хуже.

dim-an ()
Ответ на: комментарий от elverion

Можно много как решать задачу по ссылке, я вот решаю с помощью CTRL+J :)

dim-an ()

Человек постарался а вы ему «не нужно». Лор такой лор :/

bga_ ★★ ()

по сабжу. код написан интересно. питон компилит микро лисп в вим

bga_ ★★ ()

это лечится typedef'ами и шаблонами

Reset ★★★★★ ()
Ответ на: комментарий от Reset

Все равно печатать много =)

Кстати typedef'ы плагин обрабатывает правильно.

Если было

typedef vector<int> vec_t;
vec_t myVector;
тип итератора будет vec_t::const_iterator / vec_t::iterator

dim-an ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.