Geht das eleganter?
-
Köstlich. Nur weil ich die vorgeschlagenen Lösung als absolut NICHT elegant finde, bin ich natürlich gleic ein Troll. Aber natürlich, das ist nicht Arroganz von euch - es ist wohl einfach Fakt, dass wenn man Lösungen von euch nicht sofort gut findet man automatisch ein blöder Troll ist. Widerlich so eine Haltung. Und wenn ich lesen muss, dass manche auf Seite 7 das Problem immer noch nicht verstanden habe (obwohl ich mehrmals den KOMPLETTEN Problemcode gepostet habe), kann man sich auch seinen Teil denken.
Und abzustreiten das der vorgeschlagene Code mit Kanonen auf Spatzen schießen ist, ist auch lächerlich. Um also 2 oder 3 ifs (ich wiederhole: ZWEI oder DREI ifs) im Code zu elimineren soll ich Konstrukte wie template <class T> class Foo : public IFoo, private boost::noncopyable, liste von einem Typ anlegen, wobei ich für jeden Datentyp eine eigene Klasse anlegen soll, reinterpret_casts usw usw.)
Und Double Dispatching Pattern bei diesem Fall vorschlagen, ist auch mehr als sinnfrei.Wie ich bereits gesagt habe: Ich bleibe bei void*. Das hat absolut nichts mit Sturheit zu tun - welch idiotischer Vorwurf. Was glaubt ihr wohl warum ich hier im Forum frage ob es anders geht?
Wie auch immer, wenn ich die ellenlangen Codes mit dem winzige Code des void* Vergleiche ist die Entscheidung sehr leicht.
-
Es ist für Anfänger normal, dass sie "Eleganz" im Code noch nicht erkennen können.
Du brauchst dir also keine Vorwürfe zu machen. Nimm jetzt ruhig dein void* und später, viele, viele Bücher später, darfst du dann auch bei den großen Jungs mitspielen.
Bis dahin könntest du vielleicht auf das Rumtrollen verzichten, ja?
-
Selten ein Forum erlebt mit so vielen arroganten Arschlöchern.

-
SucherDerEleganz schrieb:
Selten ein Forum erlebt mit so vielen arroganten Arschlöchern.

Aber selbst beleidigend werden, und Informationen verweigern.
-
SucherDerEleganz schrieb:
Selten ein Forum erlebt mit so vielen arroganten Arschlöchern.

Lieber ein Arsch mit Niveau, als eine Blase voller Urin...
-
SucherDerEleganz schrieb:
Selten ein Forum erlebt mit so vielen arroganten Arschlöchern.

Große Worte von einem der nach wenigen Posts anfängt die Intelligenz der Leute anzuzweifeln, die versuchen ihm zu helfen.
Ich hingegen hab selten ein Forum mit so einer Anhäufung von Kompetenz und so wenigen A***l**** erlebt.
Ansonsten stimme ich Tachyon zu.
-
Tachyon schrieb:
Simon2 schrieb:
...
Ne, ich rede hier nicht von Polymorphie und spätem binden.
Ich meinte frühes binden, so ähnlich, wie bei std::ostream:void CC::put(int a); void CC::put(float a); void CC::put(double a); //... CC c(/*...*/); //Entscheide, was gelesen wird, in diesem Fall float... float input; c.put(input); //CC::put(float a)Irgendwie so.
Aber das ist doch exakt dasselbe, wie ich mit meinem template-Ansatz gemacht habe (nur dass Du die overloads ausgeschrieben und Dich mit einem Kommentar um den switch gedrückt) hast... :p

Gruß,
Simon2.
-
SucherDerEleganz schrieb:
Selten ein Forum erlebt mit so vielen arroganten Arschlöchern.

Tröste Dich: Das Forum hat schon einige Newbies mit Diva-Komplex überlebt....
Übrigens: Hat Deine Haltung Dich inzwischen zum Ziel gebracht und Du Dein Problem gelöst ?
Gruß,
Simon2.
-
SucherDerEleganz schrieb:
Naja, da mir offenbar niemand ein paar konkrete (!) Codeschnippsel zeigen kann, bleibe ich einfach bei meinem void*.
Spätestens auf Seite 3 hätte man merken müssen, dass er in seiner Sturheit sowieso sein
void*bis zum Tod verteidigen wird.Aber ja, ist ja nicht der erste Armer-Hilfesuchender-Gegen-Böse-Community-Krieg in diesem Forum. Eigentlich nur schade um die Zeit, die die Benutzer dafür opfern mussten...
-
Simon2 schrieb:
SucherDerEleganz schrieb:
Selten ein Forum erlebt mit so vielen arroganten Arschlöchern.

Tröste Dich: Das Forum hat schon einige Newbies mit Diva-Komplex überlebt....
Ich bin weder ein Newbie noch eine Diva. Aber der Grad an Arroganz hier ist einfach widerlich.
Simon2 schrieb:
Übrigens: Hat Deine Haltung Dich inzwischen zum Ziel gebracht und Du Dein Problem gelöst ?
Und wie so oft habe ich etwas bereits mehrfach gesagt aber es wird dennoch immer und immer wieder blöd nachgefragt. Ich habe bereits gesagt, dass ich den void* lasse. Ich habe in der Zwischenzeit schon zig andere Sachen gemacht, weil ich mich nicht ewig mit so Kleinscheiss rumplagen kann (ich muss produktiv sein und kann es mir nicht erlauben in meiner kleinen, theoretisch idealen Traumwelt rumzugeistern)
Wenn den Thread jemand mit etwas Distanz und Objektivität durchliest wird er feststellen, dass sich einige der Leute, die versucht haben zu Antworten, wie arrogante Kinder aufgeführt haben ("dädädä, dein Code is voll mies du Kackn00b, da muss man ja kotzen"; ja ist klar, ein void* ist die schlimmste Sünde der Erde) und nicht eine einzige lauffähige und elegante Lösung gezeigt wurde. Nur ewig lange Konstrukte, die ich dann natürlich noch modifizieren muss. Und wenn man das gezeigte dann nicht gut findet, liegt das natürlich nur daran, dass man ein Newbie ist und Diva.

-
@SucherDerEleganz,
Was suchst du denn noch hier, wenn das hier alles arrogante Arschlöcher in diesem Forum sind?
Es wurde auf Seite eins eigentlich genügend gesagt, um dein Problem zu lösen, doch warst du nie zufrieden, ohne wirklich zu begründen. Wurdest sogar etwas vorlaut und am Ende beleidigend, da kann man wirklich nicht viel anderes erwarten.Zudem ist es wirklich fraglich, ob du wirklich genügend Verständnis von C++ hast, dass du kein Newbie bist. Ich will dir jetzt nicht auf die Füsse treten, aber wenn ich dich mal von der ersten Seite zitieren darf:
SucherDerEleganz schrieb:
Wie ich nun den void* data durch ein std::tr1::array ersetzen kann ist mir nicht ganz klar. Dazu brauch ich ja den Typen, aber den kenn ich ja nicht bei der Deklaration der Klasse. Ich müsste wohl also sowas schreiben:
std::tr1::array<T> und Foo zu einer Template Klasse machen, oder? Aber das will ich auf keinen Fall, denn Foo hat mit Templates ja eigentlich nix am Hut
Wieso willst du unbedingt verhindern, dass Foo zu einer Templateklasse wird? Wieso sollte sie nichts mit Templates am Hut haben? Genau für sowas sind Templates da, aber das scheinst du ja nicht zu verstehen.
Es wurde zwar schon Code gezeigt, aber ich kann dir gern nochmals was hinklatschen. Ich nehme jetzt nur die Beschreibung vom Problem, welche du auf der ersten Seite gegeben hast, die sollte ja ausreichen, oder?
template<typename ValueT> class Foo { // Typedefs // public: typedef ValueT Value; typedef std::vector<Value> Vector; // Attributes // private: Vector m_vector; // Constructors & Destructor // public: Foo(); ~Foo(); // Methods // public: void read(typename Vector::size_type amount); void method(); }; template<typename ValueT> void Foo<ValueT>::read(typename Vector::size_type amount) { // ... m_vector.resize(amount); // ... } template<typename ValueT> void Foo<ValueT>::method() { // ... y = m_vector[index] * scaleY; // ... }Genau was du verlangt hast. Wieso willst du es dann nicht? Und sowas ähnliches hatte sogar schon drakon hingeschrieben, auch auf Seite eins. Aber aus einem nicht ergründbaren Grund, verabscheust du anscheinend Templates ...
Grüssli
-
Die Liste der Beleidigungen/falschen Vorwürfe wird immer länger. Hallo Leseverständnis? Ich habe NIE gesagt hier sind ALLE nur arrogante Arschlöcher. Ich habe gesagt hier gibt es verdammt viele davon. Und dabei bleibe ich auch. Man nimmt void* => ist ein Noob. Man findet die "Lösungen" nicht elegant => man ist ein Noob und eine Diva usw. usw. Das ist Arroganz pur (und ich hasse Arroganz - vor allem da sie nie gerechtfertigt ist).
Ich wollte einfach wissen, ob man auf elegante (=wenig,schlichter Code) Weise den void* austauschen kann. Was kommen für Antworten? Double Dispatching Pattern und 50 Zeilen langer Code (der dennoch so noch nicht verwendbar ist), für den ich boost installieren muss und der private Vererbung, reinterpret casts und smart pointer verwendet - das alles um 3 Zeilen Code zu ändern.) Aber jaja, ich weiß schon. Die Lösung war grandios und weil ich das nicht benutze bin ich ein C++ N00b

Ich habe gefühlte 20 mal geschrieben, dass ich nicht will das Foo eine Template Klasse sein soll. Und jetzt bringst du wieder Code, der aus Foo eine Template Klasse macht.

Wie ich bereits gesagt habe kenne ich mich recht gut mit C++ aus; der einzige Bereich wo ich wenig Erfahrung habe sind Templates. Doch so eine kleine Templateklasse anlegen schaff ich dann doch auch noch;)Warum ich es nicht will, dass Foo ein Template wird? Ganz einfach, weil es nicht passt. Die echte Foo Klasse heißt "Terrain" und ist eine recht komplexe Klasse, die sich mit Terrain Rendering beschäftigt. Und nur weil ich jetzt in 4 Zeilen von der Klasse (mit weit über 1000 Zeilen) etwas mit einem Datenarray mache, das 2 oder 3 verschiedene Typen hat, rechtfertigt das nicht, dass gleich die ganze Klasse ein Template hat. Ein Terrain<int> oder Terrain<float> macht einfach keinen Sinn. Es gibt kein float-Terrain oder int-Terrain, es gibt einfach nur ein Terrain.
Übrigens habe ich vorhin in einem großen anderen (amerikanischen) Programmierforum exakt die selbe Frage gestellt. Interessanterweise hat nicht ein einziger gesagt, dass sie mein Problem nicht verstehen. Im 3. Posting wurde dann bereits ein konkretes Beispiel gezeigt (statische Template Funktion; die Klasse selber ist kein Template). Der void* Code wurde (in diesem Fall) übrigens auch als absolut zulässige Lösung empfunden.
-
Glückwunsch, dann hast du deine Lösung ja und wir alle brauchen uns nicht weiter mit dem Thema rumzuquälen. Oder mit irgendwelchen "arroganten Arschlöchern" (aus wessen Sicht jetzt auch immer).