Information über die Attribute einer Klasse
-
Um noch mal auf den op zurückzukommen:
Eine einfach Lösung wäre, jedem Attribut einen Defaultwert zu geben, z.B. 0 , 0.0f und "".
In der Ausgabefunktion überprüfst du einfach, ob der Wert ein anderer ist, als dieser Defaultwert und gibst ihn in Abhängigkeit davon aus.
Alternativ kannst du statt mit einem Defaultwert auch mit einem bool flag arbeiten.
-
Die O-Notation sagt Dir nur was über die Form und ungefähren "Verlauf" der Steigung der Komplexität O(N) sagt, dass der Aufwand linear mit der Anzahl der Elemente steigt.
Verlauf, steht deswegen in Anführungszeichen, weil die exakte Steigung keine Rolle spielt, d.h. O(100*N) = O(N). Somit hast Du mit einer solchen Komplexitätsangabe nur einen ungefähren Anhaltspunkt, ohne dass Du aber zwei Algorithmen die beide eine Komplexität von O(N) haben, als gleich schnell bei gegebenem N annehmen kannst. Es können eben Welten dazwischen liegen.
Dann kommen eben noch Offsets hinzu, also Aufwand, der unabhängig von N zu betreiben ist.
Daher: O(N) gibt Dir Informationen bezüglich des Zeitverhaltens eines Algorithmus in Relation zur Größe der Daten. Mehr nicht. Mehr Informationen gibt Dir nur ein Profiler.
Ansonsten findest Du hier: http://en.wikipedia.org/wiki/Big_O_notation mehr Details.
-
Also erstmal vielen Dank für die Antworten, auch wenn sie bis jetzt nicht so hilfreich waren

Wovon rede ich hier eigentlich? Davon:
Ich habe ein Framework in welchem parallele Module kommunizieren, und zwar datenbasiert. Sie erstellen also Objekte und schicken diese hin und her, und das können sehr sehr viele pro Sekunden sein! Die Objekte sollen also sehr performant und klein sein.
Das Problem, der Empfänger weiß gar nicht immer was er da kriegt, soll es aber z.B. ausgeben können. Ich muss also wissen was für Attribute das empfangene Objekt hat, um es ausgeben zu können.
-
fabske schrieb:
Das Problem, der Empfänger weiß gar nicht immer was er da kriegt, soll es aber z.B. ausgeben können. Ich muss also wissen was für Attribute das empfangene Objekt hat, um es ausgeben zu können.
Muss der Empfänger das wirklich wissen? WIso kann es nicht das "Message" Objekt eine Methode für die Ausgabe anbieten, und der Empfänger ruft diese dann nur noch auf?
-
ogni42 schrieb:
Die O-Notation sagt Dir nur was über die Form und ungefähren "Verlauf" der Steigung der Komplexität O(N) sagt, dass der Aufwand linear mit der Anzahl der Elemente steigt.
Nein, Groß-O ist eine obere Schranke des asymptotischen Verhaltens.
Daher: O(N) gibt Dir Informationen bezüglich des Zeitverhaltens eines Algorithmus in Relation zur Größe der Daten. Mehr nicht.
Du kannst die Notation für so ziemlich alle Größen verwenden, nicht nur für Zeit in Abhängigkeit der Eingabegröße.
Und was willst du mit M und N?
-
ogni42 schrieb:
Kann mir mal jemand bitte ein Beispiel zeigen, wo man Reflection wirklich braucht, weil es anders nicht geht (i.S.v. alles andere gibt ein schlechteres Design)?
Reflection erlaubt es zwar, schnell und einfach was zusammenzukleben, führt meiner Erfahrung nach aber meist zu eher schlechtem Design...
Gerade in einer statisch typisierten Sprache wie C++, sollte man imo eher Abstand von solchem Voodoo halten.
-
While(true){} schrieb:
...
Du meinst wohl:
while(true);
-
for(;;);
-
a:goto a;
-
Alter, wer benutzt noch goto?
-
Hacker schrieb:
Alter, wer benutzt noch goto?
goto ist seit dem 6.8.2002 wieder erlaubt.
-
ogni42 schrieb:
Kann mir mal jemand bitte ein Beispiel zeigen, wo man Reflection wirklich braucht, weil es anders nicht geht (i.S.v. alles andere gibt ein schlechteres Design)?
Generische Serialisierung.
-
senfdazu schrieb:
ogni42 schrieb:
Kann mir mal jemand bitte ein Beispiel zeigen, wo man Reflection wirklich braucht, weil es anders nicht geht (i.S.v. alles andere gibt ein schlechteres Design)?
Generische Serialisierung.
Wieso sollte man dafür unbedingt Reflection brauchen?
-
dot schrieb:
senfdazu schrieb:
ogni42 schrieb:
Kann mir mal jemand bitte ein Beispiel zeigen, wo man Reflection wirklich braucht, weil es anders nicht geht (i.S.v. alles andere gibt ein schlechteres Design)?
Generische Serialisierung.
Wieso sollte man dafür unbedingt Reflection brauchen?
Schreib eine Funktion in C++ (Standard) die jede beliebige Klasse in einen String schreibt und wieder ausliest. Jede beliebige Klasse bedeutet, dass die Klasse kein spezielles Interface oder Methoden haben muss und ich nicht irgendwo Variablen angeben muss, also generisch.
-
Interessante Definition von "generisch". Zeig mir mal so ein Beispiel in irgendeiner anderen Sprache für nichttriviale Fälle, das z.B. auch mit der Tatsache zurechtkommt, dass die Member einer Klasse sich im Laufe der Zeit ändern können und werden, man aber trotzdem mit Serialisierungen in älteren Formaten kompatibel bleiben muss.
-
dot schrieb:
Interessante Definition von "generisch".
Ja, generisch bedeutet mehr, als nur Templates verwenden.
Zeig mir mal so ein Beispiel in irgendeiner anderen Sprache für nichttriviale Fälle, das z.B. auch mit der Tatsache zurechtkommt, dass die Member einer Klasse sich im Laufe der Zeit ändern können und werden, man aber trotzdem mit Serialisierungen in älteren Formaten kompatibel bleiben muss.
Geht, wenn man es generisch macht und neue Member so läßt, wie sie default initialisiert wurden. Du kannst jetzt dir irgendwelche Sachen ausdenken, wo x von Version 1 zu y in Version 2 werden muss, aber dann ist es nicht mehr generisch, sondern speziell.
-
senfdazu schrieb:
dot schrieb:
Interessante Definition von "generisch".
Ja, generisch bedeutet mehr, als nur Templates verwenden.
Mir ist klar was generisch bedeutet.
senfdazu schrieb:
Zeig mir mal so ein Beispiel in irgendeiner anderen Sprache für nichttriviale Fälle, das z.B. auch mit der Tatsache zurechtkommt, dass die Member einer Klasse sich im Laufe der Zeit ändern können und werden, man aber trotzdem mit Serialisierungen in älteren Formaten kompatibel bleiben muss.
Geht, wenn man es generisch macht und neue Member so läßt, wie sie default initialisiert wurden. Du kannst jetzt dir irgendwelche Sachen ausdenken, wo x von Version 1 zu y in Version 2 werden muss, aber dann ist es nicht mehr generisch, sondern speziell.
Kannst du das etwas genauer erläutern?
-
senfdazu schrieb:
ogni42 schrieb:
Kann mir mal jemand bitte ein Beispiel zeigen, wo man Reflection wirklich braucht, weil es anders nicht geht (i.S.v. alles andere gibt ein schlechteres Design)?
Generische Serialisierung.
Genau das mache ich! Hast du mir einen Tipp wie ich weiterkomme?
-
senfdazu schrieb:
Generische Serialisierung.Wie geht das denn bitte mit Reflection einfacher? Da würde ich mal gerne Code zu sehen. So einfach als Behauptung kann ich das nicht glauben. Und dann sollten wir mal Alternativen gegenüber stellen.
-
ogni42 schrieb:
senfdazu schrieb:
Generische Serialisierung.Wie geht das denn bitte mit Reflection einfacher? Da würde ich mal gerne Code zu sehen. So einfach als Behauptung kann ich das nicht glauben. Und dann sollten wir mal Alternativen gegenüber stellen.
Dann schreib doch zuerst mal eine Generische Serialisierung in C++, wenn du meinst, dass das geht. fabske will es auch wissen.