Java Code in C++ überführen
-
geht mit c++ nicht
-
möööööööp schrieb:
geht mit c++ nicht
Doch schon. Nur komplizierter...
-
list.add(new A() { @Override public void test() { System.out.println("foo");Weisst du was hier im Hintergrund passiert? Es wird eine neue (unbenannte) Klasse definiert, in der die abstrakte Methode ueberschrieben wird. Und dann wird ein Object davon erzeugt. Unbenannte Klassen gibt es in C++ nicht, also musst du dir eine neue abgeleitet Klasse a la DummyA definieren und eine Instanz dieser benutzen.
Abstrakte Methoden werden mit "pure virtual member function"s in C++ realisiert und deine Liste wird wohl nur A* als Templateparameter enthalten.
-
pumuckl schrieb:
möööööööp schrieb:
geht mit c++ nicht
Doch schon. Nur komplizierter...
sag ich doch geht nicht. Natürlich kann man was kompliziertes bauen was sich so ähnlich verhält, aber das ist halt nicht das gleiche.
-
#include <list> struct a { ~a(){} virtual void operator() () = 0; }; int main () { std::list<a*> l; { struct b : a { void operator () () { std::cout << "foo" << std::endl; } }; l.push_back ( new b ); struct c : a { void operator () () { std::cout << "bar" << std::endl; } }; l.push_back ( new c ); } //b b_; //geht nicht (anonym) //c c_; //auch nicht (anonym) struct c {}; //geht hier for (std::list<a*>::iterator it = l.begin(); it != l.end (); ++it) (**it) (); for (std::list<a*>::iterator it = l.begin(); it != l.end (); ++it) delete *it; }Das ist etwa das, was man in C++ machen kann. (Zumindest im Moment. Es werden halt noch keine anonymen Funktionen unterstützt, aber man kann das auch mittels Scopes regeln.)
Was daran so kompliziert sein soll weiss ich nicht. Es ist nicht üblich, aber es könnte halt schon eine Verwendung finden.Beachte, dass in C++ new eine etwas andere Bedeutung hat, wie in Java. (manuelle Speicherverwaltung)
-
möööööööp schrieb:
pumuckl schrieb:
möööööööp schrieb:
geht mit c++ nicht
Doch schon. Nur komplizierter...
sag ich doch geht nicht. Natürlich kann man was kompliziertes bauen was sich so ähnlich verhält, aber das ist halt nicht das gleiche.
Kruemelkacker! Ne, das gleiche sowieso nicht, das eine ist Java und das andere ist C++. Wenn ich einen englischen Text ins Deutsche uebersetze, dann ist es auch nicht mehr das gleiche. Und wesentlich komplizierter ist das vorgeschlagene auch nicht.
-
Weisst du was hier im Hintergrund passiert? Es wird eine neue (unbenannte) Klasse definiert, in der die abstrakte Methode ueberschrieben wird. Und dann wird ein Object davon erzeugt. Unbenannte Klassen gibt es in C++ nicht, also musst du dir eine neue abgeleitet Klasse a la DummyA definieren und eine Instanz dieser benutzen.
Also in Java bin ich relativ gut eingearbeitet, kenne mich also mit anonymen Klassen usw. ganz gut aus.
Wollte eigentlich nur wissen ob es anonyme Klassen in C++ gibt...anscheinend ja nicht.
Thx
-
Ravendark schrieb:
Wollte eigentlich nur wissen ob es anonyme Klassen in C++ gibt
Diese Frage hat mit dem ersten Post kaum was zu tun. Also wieder Zeit verschwendet.
-
Ravendark schrieb:
Wollte eigentlich nur wissen ob es anonyme Klassen in C++ gibt...anscheinend ja nicht.
Doch, die gibt es. Aber meistens machen die nicht sehr viel Sinn.
class Anonymous { } Object;
-
Ravendark schrieb:
Wollte eigentlich nur wissen ob es anonyme Klassen in C++ gibt...anscheinend ja nicht.
Wieso fragst du das dann nicht gleich?

Nein, wie schon gesagt wurde, anonyme Klassen gibt es in der Art nicht in C++. Allerdings braucht man sowas in C++ auch nicht, da man ganz andere Lösungsmittel dafür hat. Zum Beispiel könnte man hier Boost.Function erwähnen, bzw. im nächsten Standard wird das Zeug auch dabei sein. Und wenn wir vom nächsten Standard reden, könnte man auch gleich die Lambda Expressions erwähnen, welche man zum Teil bereits in Boost auch schon vorfindet.So ein Vergleich ist eher unsinnig. Die beiden Sprachen sind nunmal verschieden und man löst die Probleme auf andere Weise.
@Nexus,
Du meinst wohl eher das folgende:class { } Object;Sonst hätte die Klasse schliesslich einen Namen und wäre nicht mehr anonym.
Einsatzzweck für sowas kenne ich bisher übrigens nur den
nullptr:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-220511.htmlGrüssli
-
Dravere schrieb:
@Nexus,
Du meinst wohl eher das folgende:Natürlich, da hab ich zu wenig überlegt... Danke.
