I’m trying to use boost::bind and boost::function with
std::logical_not and I’ve run into some strange template magic that I don’t
understand. In the example below, I use boost::function to help compose
several boost::bind calls so that I don’t have to do it all on one line
(I find that this improves readability). The problem is that when I do
this, the functions that are bound with boost::bind never get called. They will get called only if I construct
everything on one line. (???)
Is this expected behavior? If so, why does it work
like this?
Thanks,
aaron
#include <algorithm>
#include <functional>
#include "boost/bind.hpp"
#include
"boost/function.hpp"
using namespace std;
using namespace boost;
class test {
public:
void bindtest() {
// test1: composed gradually for
clarity
//
function<bool ()>
funcFoo = bind(&test::foo, this);
function<bool ()>
funcBar = bind(&test::bar, this);
function<bool ()>
funcTest1= bind(logical_and<bool>(),
funcFoo, funcBar);
// doesn't call test::foo or
test::bar! (returns true)
bool test1=
funcTest1();
cout << "test1= " << test1 << endl;
// test2: composed directly on one
line
function<bool ()> funcTest2=
bind(logical_and<bool>(),
bind(&test::foo, this),
bind(&test::bar, this)
);
// calls test::foo and test::bar
(returns false)
bool test2= funcTest2();
cout << "test2= " << test2 << endl;
}
bool foo()
{
cout << "foo" << endl;
return false;
}
bool bar()
{
cout << "bar" << endl;
return false;
}
};