/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Visitor Patten in C++
Fra : Rolf Kristensen


Dato : 12-02-03 23:58

Jeg koger lidt med et visitor pattern, fordi jeg har objekt hierarki, som
jeg skal udføre en række funktioner på, som jeg ikke ønsker placeret på
selve objekterne for at undgå for mange afhængigheder.

I det design jeg har fundet frem til nu, så kræver det at jeg har en Visitor
for hver eneste funktion. Men jeg er lidt irreteret over at have et Visitor
class for hver enkelt funktion(Call1,Call2), og ville gerne have samlet alle
Visitor's og Caller i en enkelt klasse.

Er der nogen som kan hjælpe med en god ide ???

-Rolf

class BaseClass;
class SpecialClass;

class Visitor
{
public:
virtual void Visit(BaseClass* theBase) = 0;
virtual void Visit(SpecialClass* theSpecial) = 0;
};

class BaseClass
{
public:
virtual void Accept(Visitor* theVisitor) { theVisitor->Visit(this); }
};

class SpecialClass : public BaseClass
{
public:
virtual void Accept(Visitor* theVisitor) { theVisitor->Visit(this); }
};

class Visitor1 : public Visitor
{
virtual void Visit(BaseClass* theBase) { printf("Base1\n"); }
virtual void Visit(SpecialClass* theSpecial) { printf("Special1\n"); }
};

class Visitor2 : public Visitor
{
virtual void Visit(BaseClass* theBase) { printf("Base2\n"); }
virtual void Visit(SpecialClass* theSpecial) { printf("Special2\n"); }
};

class Caller
{
public:
void Call1(BaseClass* theBase) { theBase->Accept(&itsVisitor1); }
void Call2(BaseClass* theBase) { theBase->Accept(&itsVisitor2); }
private:
Visitor1 itsVisitor1;
Visitor2 itsVisitor2;
};

int main(int argc, char *argv[])
{
Caller aCaller;
BaseClass* aTestClass = new BaseClass;
aCaller.Call1(aTestClass);
aCaller.Call2(aTestClass);
aTestClass = new SpecialClass;
aCaller.Call1(aTestClass);
aCaller.Call2(aTestClass);
}



 
 
Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste