понедельник, 18 октября 2010 г.

Upgrade to VS2010

У нас идет плановый переход на Visual Studio 2010. Почти все проекты сконвертились без приключений. Пока только две проблемы заставили подумать.

1. В соответствии с новым, ещё не принятым, стандартом, у ассоциативных контейнеров iterator и const_iterator — оба константные итераторы (см. §23.2.4). С одной стороны, это позволяет избежать ошибок на этапе компиляции, ведь, например, у std::set изменение элемента контейнера может разрушить этот контейнер. С другой стороны, если мы точно знаем, что мы меняем элемент и при этом порядок элементов не меняется, то можно сэкономить кучу тактов, если менять элементы напрямую. К счастью, для второго случая остается лазейка — можно объявить поля структуры, которые мы хотим менять, mutable. Конечно, нужно быть очень осторожным, но предполагается, что если мы пишем mutable, то мы знаем что делаем.

2. В проектах со смешанным кодом C++ и C++/CLI иногда перестали подгружаться managed-ресурсы. Расследование показало, что у resx-файлов поле Logical resource name в настройках проекта равно чему-то вроде $(RootNamespace).%(Filename).resources. Так вот этот %(Filename) ни чем не заменяется при компиляции. Проблема решается ручной настройкой для каждого resx-файла. Надо бы баг запостить в connect.microsoft.com, но пока не до этого.

Также, к сожалению, подсветка синтаксиса для стандартных типов (из стандартной библиотеки) в C++ по прежнему отсутствует. Поэтому пригодился старый файл usertype.dat, который можно положить рядом с devenv.exe и все указанные типы начинают светиться любимым цветом (любимый цвет выбирается). Каждый может написать свой файл usertype.dat, формат предельно прост — каждая строка содержит один тип.

Комментировать в ВКонтакте