![]() |
|
|
|||||||
![]() |
C++ - for_each bind2nd reference to reference error |
|
|
Thread Tools | Search this Thread |
|
|
#1 |
|
Posts: n/a
|
I have a vector (v) containing objects of class C.
class C { private: double d; public: void foo( B& b ); }; class B { public: int i; double x; // lots of other things, which is why its passed by reference. }; I'd like to run function foo for each element in v. foo takes one argument of class B passed by reference. The following lines produces a reference to reference error: vector<C> v(50); B b; for_each( v.begin(), v.end(), bind2nd( mem_fun_ref(&C::foo), b ) ); How can I get around this using for_each? |
|
|
|
#2 |
|
Posts: n/a
|
Chris Roth wrote:
> I have a vector (v) containing objects of class C. > > class C > { > private: > double d; > public: > void foo( B& b ); > }; > > class B > { > public: > int i; > double x; > // lots of other things, which is why its passed by reference. > }; > > I'd like to run function foo for each element in v. foo takes one > argument of class B passed by reference. The following lines produces a > reference to reference error: > > vector<C> v(50); > > B b; > > for_each( v.begin(), v.end(), > bind2nd( mem_fun_ref(&C::foo), b ) ); > > How can I get around this using for_each? Not with bind2nd and friends. You need boost::bind or tr1::bind. A much more general and powerful solution anyway. You also get to forget all about bind1st/2nd, mem_fun, mem_fun_ref, etc... Without boost::bind and boost::ref you're going to be stuck making your own functor or a for loop. |
|
|
|
#3 |
|
Posts: n/a
|
Noah Roberts wrote:
> > Not with bind2nd and friends. You need boost::bind or tr1::bind. A > much more general and powerful solution anyway. You also get to forget > all about bind1st/2nd, mem_fun, mem_fun_ref, etc... > > Without boost::bind and boost::ref you're going to be stuck making your > own functor or a for loop. Yep, I gave up and went boost with this also: #include <vector> #include <algorithm> #include <boost/bind.hpp> using namespace std; using namespace boost; class B { public: int i; double x; }; class C { private: double d; public: void foo( B& b ){} }; int main() { vector<C> v(50); B b; //for_each( v.begin(), v.end(), mem_fun_ref(&C::foo), b ) ); for_each( v.begin(), v.end(), bind(&C::foo, _1, ref(b))); } |
|
|
|
#4 |
|
Posts: n/a
|
On Mar 9, 6:09 pm, Chris Roth <czr...@mail.usask.ca> wrote:
> I have a vector (v) containing objects of class C. > > class C > { > private: > double d; > public: > void foo( B& b ); > > }; > > class B > { > public: > int i; > double x; > // lots of other things, which is why its passed by reference. > > }; > > I'd like to run function foo for each element in v. foo takes one > argument of class B passed by reference. The following lines produces a > reference to reference error: > > vector<C> v(50); > > B b; > > for_each( v.begin(), v.end(), > bind2nd( mem_fun_ref(&C::foo), b ) ); > > How can I get around this using for_each? class MyFunctor { public: MyFunctor (B & b) : m_b (b) {} void operator () (C & c) { c.foo (m_b); } private: B & m_b; } std::for_each (v.begin (), v.end (), MyFunctor (b)); |
|
![]() |
| Thread Tools | Search this Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Need help on Modelsim VHDL syntax? ASAP:) | kaji | General Help Related Topics | 0 | 03-14-2007 09:43 PM |
| Need help on a Modelsim VHDL Syntax? ASAP:) | kaji | Software | 0 | 03-14-2007 09:43 PM |
| Need Help on a Modelsim VHDL Syntax....ASAP:) | kaji | Hardware | 0 | 03-14-2007 09:41 PM |
| Parser Error Message: Could not load type 'Microsoft.SharePoint.ApplicationPages.Glob | rasmita | General Help Related Topics | 0 | 09-05-2006 04:49 AM |
| Parser Error Message: Could not load type 'Microsoft.SharePoint.ApplicationPages.Glob | rasmita | General Help Related Topics | 0 | 09-05-2006 04:46 AM |