Hier ist eine vereinfachte Implementierung des Besuchermusters in C++. Ist es möglich, so etwas in Python zu implementieren?Besuchermuster in Python
Ich brauche es, weil ich Objekte aus C++ - Code an eine Funktion in Python übergeben werde. Meine Idee war, einen Besucher in Python zu implementieren, um den Typ des Objekts herauszufinden.
Meine C++ Code:
#include <iostream>
#include <string>
class t_element_base
{
public:
virtual void accept(class t_visitor &v) = 0;
};
class t_element_deriv_one: public t_element_base
{
public:
void accept(t_visitor &v);
std::string t_element_deriv_one_text()
{
return "t_element_deriv_one";
}
};
class t_element_deriv_two: public t_element_base
{
public:
void accept(t_visitor &v);
std::string t_element_deriv_two_text()
{
return "t_element_deriv_one";
}
};
class t_visitor
{
public:
void visit(t_element_deriv_one& e){ std::cout << e.t_element_deriv_one_text() << std::endl; }
void visit(t_element_deriv_two& e){ std::cout << e.t_element_deriv_two_text() << std::endl; }
};
void t_element_deriv_one::accept(t_visitor &v)
{
v.visit(*this);
}
void t_element_deriv_two::accept(t_visitor &v)
{
v.visit(*this);
}
int
main
(
void
)
{
t_element_base* list[] =
{
new t_element_deriv_one(), new t_element_deriv_two()
};
t_visitor visitor;
for(int i = 0; i < 2; i++)
list[ i ]->accept(visitor);
}
Vielen Dank für Ihre Hilfe. – bogdan
Ich weiß nicht, welche Python-Version Sie verwenden, aber in Version 2.7.6 ist der Aufruf 'instance' nicht vorhanden. Sie sollten 'isinstance' verwenden – Matthias
@Matthias - guter Fang - wäre glücklich gewesen für Sie, das als ein Bearbeitungsvorschlag zu setzen –