for_each bind2nd reference to reference error

C

Chris Roth

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?
 
N

Noah Roberts

Chris said:
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.
 
P

Piyo

Noah said:
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)));
}
 
A

AnonMail2005

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));
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top