Ziyaretçi modelini gösteren birkaç örnek gördüm. Hepsinde, türetilen ziyaret edilen öğeler genellikle Accept() yöntemi olarak adlandırılan şeyi uygular.C++ ziyaretçi kalıbı: Neden her bir türevi ziyaret edildi Accept()?
renklerin bir hiyerarşi içinde, bu yöntem gibi görünebilir:
void Red::accept(Visitor *v)
{
v->visit(*this);
}
void Blue::accept(Visitor *v)
{
v->visit(*this);
}
Ziyaretçi yanı sıra varisleri, yöntemler varsa: Bu uygulamıyor neden
visit(Red red);
visit(Blue blue)
Benim sorum sadece (bu örnekte: Color
) temel sınıfta aynı şekilde iş yapacak ve polimorfizm, yani doğru ziyareti nesne bu var dinamik tip böylece dereferencing bir Red
bir Red
ne zamandan beri adı verilecek Red
'u verecek ve bu da ziyaretin (kırmızı) çağrılmasına neden olacak mı?
Neyi eksik? Sahip olduğun, tek accept
olsaydı ...
Eğer bir temel sınıfta isterseniz, o zaman [İlginççe yinelenen şablon şablonunu] kullanmak zorundasınız (https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern). – user1810087
Daha dinamik bir dilde, 'visitBlue' ve' visitRed' işlevlerini adlandırmanız gerekebilir. Bunu da burada yapabilirsin. Bu işe yarar mı? –
Yanıt zaten sağlandı, ancak web'de "çift gönderim" için arama yapan daha fazla bilgi bulabilirsiniz (zaten "ziyaretçi modelini aramış olduğunuzu varsayalım ve size yardımcı olmadı"), kullanılan tekniğin adı budur İşte. –