/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
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
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408924
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.