Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

30.10.2004, 14:24

Zitat von »"helium"«

Der MSVC 6 ist doch bekannt dafür, das er mit Template-Code nicht klarkommt.

Ist das auch bei den Nachfolgenden Versionen so?

PD

unregistriert

22

30.10.2004, 14:43

Es gibt echt keinen Perfekten Compiler *lol* Jetzt hab ich mal versucht das projekt mit DevC++ zu kompilieren aber der erlaubt mir nicht mit delete void pointer zu löschen (bzw. das was da gespeichert ist). Wieso das so ist kann ich mir ja denken aber MSVC kam damit klar ^^ Nu muss ich das auchnoch irgendwie umgehen *sfz*

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

23

30.10.2004, 18:22

Zitat von »"kaid"«

Zitat von »"helium"«

Der MSVC 6 ist doch bekannt dafür, das er mit Template-Code nicht klarkommt.

Ist das auch bei den Nachfolgenden Versionen so?

Ab dem 7.1er (also 2003er Version) nicht mehr, der kann eigentlich alles, was man braucht.


Zitat

Es gibt echt keinen Perfekten Compiler *lol* Jetzt hab ich mal versucht das projekt mit DevC++ zu kompilieren aber der erlaubt mir nicht mit delete void pointer zu löschen (bzw. das was da gespeichert ist). Wieso das so ist kann ich mir ja denken aber MSVC kam damit klar ^^ Nu muss ich das auchnoch irgendwie umgehen *sfz*

Wer ruft denn den passenden Destruktor auf?
In der regel braucht man in C++ aber auch keine void-Zeiger mehr, da man sowas mit Templates, boost::any oder sonstigendwas anderem viel bequemer machen kann.

Solltest du einfach nur Speicher benötigen (irgend ne Art von Puffer), dann machste das natürlich so:

C-/C++-Quelltext

1
2
3
void * speicher = operator new (menge_in_Byte);
...
operator delete (speicher);

PD

unregistriert

24

30.10.2004, 18:25

Die sache ist die das ich nen vector (notfals auch array) aus Zeigern brauche die aber alle auf was andres zeigen ^^ Plötzlich kommt DevC++ auch mit delete und void zeigern zurecht (kA wieso).

Jedenfals klappts nu, thx :)

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

25

31.10.2004, 12:13

Für mich klingt das so, als sei std::vector<boost::any> angebracht (www.boost.org)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

26

31.10.2004, 15:21

*den finger heb* ich weiß irgendwie nicht, aber ich komme mit void zeigern ganz gut und schnell zurecht. Was bringt denn die 13MB große lib so an Vorteilen?

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

27

01.11.2004, 12:54

boost allgemein?

Beispielswiese "bessere" Smart-Pointer, als std::auto_ptr. Das heißt du musst dich nicht mehr um's Freigeben von Speicher kümmern. Das erleichtert natürlich auch das Programmieren von exceptionsicherem Code.
Es gibt auch Kleinigkeiten. Beispielsweise, wenn du Zahlen in Texte umwandeln willst oder andersherum, dann darfst du normalerweise mit Stringstreams arbeiten, was aber manchmal eigentlich viel zu viel des Guten ist und deswegen unübersichtlich. Dafür gibts dann 'lexical_cast'

C-/C++-Quelltext

1
2
string ergebnis = lexical_cast<string>(42);
int ergebnis2 = lexical_cast<int>("12345");

Du kannst sogar alles, was an Streams schickbar (also für was ostream& operator<<(ostream&, ...) definiert ist), bzw. wieder aus ihnen herausnehmbar ist (also für was istream& operator<<(istream&, ...) definiert ist) umwandeln.

Wie gesagt, 'an'y als bessere alternative zu void-Zeigern.

'bind', falls du diese primitiven 'std::bind_1st', etc. leid bist, weil sie hässlich sind und zu wenig Fähigkeiten haben. Im Zusammenhang mit 'function', sogar wunderbar zum Currying geeignet, falls du vorher schonmal mit funktionalen Sprachen gearbeitet hast und dich jetzt ärgerst, dass es sowas in C++ nicht gibt.

'lambda' ist auch sehr cool, aber auch eher was für Leute mit Wissen über funktionales Programmieren (eben Lambda-Ausdrücke in C++).

Die MPL, so ne Art STL für's Template-Metaprogrammieren.

Dann das sehr geile 'variant', wodurch man Distinct Unions anderer Sprachen ersetzen kann. Beispielsweise top geeignet, wenn du mehrere verschiedene Typen in einen Container packen willst. Ich habe dennoch 'any' vorgeschlagen als alternative zu dem vorher genannten Void-Zeiger genannt, da ich annehme, das die Typen nicht auf eine sehr kleine Zahl (in dem Fall AFAIK 7 verschiedene) beschränkt ist. Mit 'variant' kannst du auf einfache Wiese je nach tatsächlichem Typ entsprechende Operationen ausführen lassen (nutzt dazu das Visitor-Pattern).
Einfach genial.


C-/C++-Quelltext

1
2
3
4
5
6
7
variant<int, string> foo;

foo = 22;
cout << foo << '\n';

foo = "Blabla";
cout << foo << '\n';


Und es gibt noch vieles mehr, z.B. Graphen, einen ordentlichen Parser, Reguläre Ausdrücke!!!, ...

Am häufigsten verwende ich die Smartpointer, ohne die inzwischen quasi kein Programm mehr auskommt.

/edit: Manche dinge in Hockommata gesetzt, damit sie als Eigenname erkänntlich sind und einen Satzt korigiert, der so keinen Sinn ergeben hat.
Außerdem ein absolut primitives Beispiel für 'variant' gebracht, jedoch ohne die Möglichkeiten durch das Visitor-Pattern.

PD

unregistriert

28

01.11.2004, 14:53

Ich glaub ich hab kein Wort verstanden was du da grad geschrieben hast... aber ok :D Gibt noch sehr viel was ich lernen muss ^^

Werbeanzeige