У меня есть следующий макрос:Redefine BOOST_FOREACH макрос безопасно
#define FOREACH(decl, c) BOOST_FOREACH(decl, std::make_pair((c).begin(), (c).end()))
(. Я использую этот макрос, потому что мои контейнеры не реализуют изменяемые итерации API)
Проблему с этим, что c
оценивают дважды.
Мой вопрос может этот макрос быть закреплены так, чтобы:
c
оценивается в самый раз- Любые локальные переменные, созданные для того, чтобы удовлетворить первое условие жить в пределах соответствующего Еогеасп только сферы.
Лучше избегать такого рода хакерских атак и использовать итерационные утверждения (или шаблоны функций алгоритма), когда вы хотите итерации. –
@mark, Должен ли он быть строгим C++ 03. Например, допустим ли вы g ++ конкретные расширения? –
@ Аарон - я использую VS2010. Таким образом, спецификация g ++ недоступна. – mark