
Stuart Dootson wrote:
I had to pass "&tester" to the first bind expression because g++ complained about passing "tester" as "const Test &." Is passing by reference supposed to work?
Only if you use a reference wrapper - i.e. you can use boost::ref(tester) or boost::lambda::var(tester) rather than &tester
The documentation is misleading, then: The object argument can be a reference or pointer to the object, the BLL supports both cases with a uniform interface: bool A::foo(int) const; A a; vector<int> ints; ... find_if(ints.begin(), ints.end(), bind(&A::foo, a, _1)); find_if(ints.begin(), ints.end(), bind(&A::foo, &a, _1));
If you're using a shared_ptr, you'll either need to use tester.get() directly to get a Test* to pass into the bind expression
bind(&Test::foo, tester.get(), value)
or something like
bind(&Test::foo, bind(boost::shared_ptr<Test>::get, tester), value)
to delay the call to tester.get() until invocation of printer.bar().
Yuck. Oh well, guess that's what I'll do. Are there any plans to add direct support for smart pointers? -Dave