Я использую ShrinkSafe из проекта Dojo - это исключительно, потому что это на самом деле использует интерпретатор JavaScript ( Носорог ) для контакта с нахождением символов в коде и понимании их объема, и т.д. который помогает гарантировать, что код будет работать, когда это выйдет другой конец, в противоположность большому количеству инструментов сжатия, которые используют regex, чтобы сделать то же (который не так надежен).
у меня на самом деле есть задача MSBuild в веб-Проект Развертывания в моем текущем решении для Visual Studio, которое выполняет сценарий, который в свою очередь выполняет все файлы решения JS через ShrinkSafe, прежде чем мы развернемся, и это работает вполне хорошо.
РЕДАКТИРОВАНИЕ: Между прочим, "лучше всего" открыто для дебатов, так как критерии "лучшего" будут варьироваться в зависимости от потребностей проекта. Лично, я думаю, что ShrinkSafe является хорошим балансом; для некоторых людей, которые думают самый маленький размер == лучше всего, это будет недостаточно.
РЕДАКТИРОВАНИЕ: стоит отметить, что компрессор YUI также использует Носорога
Проблема состоит в том, что это макрос, и поэтому он не может обрабатывать типы, содержащие запятые (препроцессор не знает о шаблонах).
Вы также можете объявить переменную перед циклом, см. документацию .
std::map<int, double> my_map;
//1)
typedef std::pair<int, double> MyPair;
BOOST_FOREACH(MyPair p, my_map) { ... }
//2)
std::pair<int, double> p;
BOOST_FOREACH(p, my_map) { ... }
Редактировать:
В частности, с std :: map
есть дополнительные сложности: value_type
не std :: pair
, а std :: pair
.
Следовательно, если вы используйте typedef, более правильный способ (и единственный способ, если вы хотите использовать ссылку в цикле foreach) - использовать
typedef std::pair<const int, double> MyPair;
//or
typedef std::map<int, double>::value_type MyPair;
BOOST_FOREACH(MyPair& ref, my_map) { ... }
. Однако это не сработает, если вы хотите использовать переменная, объявленная перед циклом, так как вы не можете присвоить std :: pair
BOOST_FOREACH_PAIR
- еще один вариант, который, по нашему опыту, хорошо работает: