Чтобы использовать boost::bind
, вам нужно создать функцию, которая устанавливает логическое значение в true, чтобы вы могли связываться с ним:
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/ref.hpp>
void make_true(bool& b)
{
b = true;
}
int main()
{
using namespace boost;
bool flag = false;
// without ref, calls with value of flag at the time of binding
// (and therefore would call make_true with a copy of flag, not flag)
function<void()> f = bind(make_true, ref(flag));
f();
assert(flag);
}
Однако лямбда тут поможет. Лямбды похожи на связывание, за исключением того, что они тоже создают функции, поэтому держите ваш код локализованным (не нужно никаких внешних функций). Вы бы сделали что-то вроде этого:
#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
int main()
{
using namespace boost;
using namespace boost::lambda;
bool flag = false;
function<void()> f = (var(flag) = true);
f();
assert(flag);
}
Та же идея, за исключением того, что bind
и make_true
были заменены на лямбду.