Kvaler med for_each kald
HejJeg har et problem som illustreres med nedenstående kode eksempel.
Jeg vil gerne udfører det som skitseres i test3().
Det vil sige jeg vil kalde en member-funktion i B-klassen for hvert element i A-klassevktoren.
Jeg har ledt højt og lavt men har ikke kunne finde løsningen.
(Jeg håber kodeeksemplet er læsbart)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class A
{
public:
A() : v(0) {};
A(const A& a) : v(a.v) {};
~A() {};
A& operator=(const A& a) {v = a.v; return *this;}
void do_something()
{v ++;}
void do_different_thing(const int& i)
{v = i;}
private:
int v;
};
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
class B
{
public:
B() : as(2) {};
B(const B& b) {};
~B() {};
B& operator=(const B& a) {return *this;}
void do_something_else(A& a) {}
void test1();
void test2();
void test3();
private:
std::vector<A> as;
};
//---------------------------------------------------------------------------
void do_other_things(A& a)
{
a.do_different_thing(8);
}
//---------------------------------------------------------------------------
void B::test1()
{
std::for_each(as.begin(), as.end(), std::mem_fun_ref(&A::do_something));
}
//---------------------------------------------------------------------------
void B::test2()
{
std::for_each(as.begin(), as.end(), do_other_things);
}
//---------------------------------------------------------------------------
void B::test3()
{
std::for_each(as.begin(), as.end(), &B::do_something_else);
}
//---------------------------------------------------------------------------