При обновлении до более нового компилятора и разрешения ошибок компилятора я понял, что boost::fusion::for_each
требует, чтобы объект функции прошел внутри, имеет оператор const
.Функциональный объект в boost :: fusion :: for_each отличается от std :: for_each
Пример из Boost:
struct increment
{
template<typename T>
void operator()(T& t) const
{
++t;
}
};
...
vector<int,int> vec(1,2);
for_each(vec, increment());
Это, конечно, не изменилось. Я не понял, что он отличается от std::for_each
, который не требует, чтобы оператор был const
.
struct increment
{
template<typename T>
void operator()(T& t) // no const here!!!
{
++t;
}
};
std::vector<int> numbers;
std::for_each(numbers.begin(), numbers.end(), increment());
Есть ли очевидная причина требовать const
? Я, очевидно, не могу это изменить, но я хотел бы понять, почему эти два человека отличаются друг от друга.
Спасибо за любые идеи и объяснения!
выглядит как интуиция, но это имеет смысл ;-) – Seb
У вас есть ссылка, где говорится, что заказ не определен? – murrekatt
@ murrekatt Нет, не знаю. Но также [документация] (http://www.boost.org/doc/libs/1_47_0/libs/fusion/doc/html/fusion/algorithm/iteration/functions/for_each.html) не упоминает строгих порядок вызовов. И есть [почтовый поток] (http://lists.boost.org/boost-users/2007/03/26355.php), который может вас заинтересовать - основная идея - оптимизация производительности. –