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

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

1

21.10.2006, 09:24

Werte einfach und schnell konvertieren

Hi,

ich arbeite zur Zeit an einer Funktion, die wichtige Parameter zum Erstellen meiner Irrlicht Device aus ini Dateien läd bzw hineinschreibt. Kurzes Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
wchar_t DeviceType[100];
E_DRIVER_TYPE Type;

GetPrivateProfileString(L"DEVICE", L"DeviceType", L"EDT_SOFTWARE", DeviceType, sizeof(DeviceType), FileName);

if (wcscmp(DeviceType, L"EDT_SOFTWARE") == 0) Type = EDT_SOFTWARE;
//hier dann weitere Umwandlungen für die anderen Modi


Meine Frage: Geht das auch irgendwie kürzer? Bei wenigen Parametern mehr sprengt die Funktion dann schnell den Rahmen der Übersichtlichkeit...

Anonymous

unregistriert

2

21.10.2006, 10:03

Warum kapselst Du den ganzen Quatsch da oben nicht in einer eigenen Funktion und rufst die dann auf? Das ist eigentlich wenn man so etwas öfter benutz einer der logischen Schritte.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

3

21.10.2006, 18:22

Ist nicht so, das ich mir das nicht überlegt hätte, aber dadurch spar ich doch nicht wirklich Code, weil ich der Funktion dann auch wieder jedesmal die Variable, den Defaultwert, den Variablennamen usw übergeben muss, oder überseh ich irgendwas?
Ich kann ja nicht die Umwandlung von String (zB EDT_SOFTWARE) in die zugehörige Zahl automatisieren, oder doch? Zumal die Variablen, die ich in der ini zuweisen will auch noch alle unterschiedliche Typen haben.
Man könnte es halt mit Chunks machen, aber dann geht der schöne Effekt der einfachen Bearbeitung von inis verloren..

Anonymous

unregistriert

4

21.10.2006, 18:41

Was haben ini-Dateien mit Chunks zu tun? Gar nichts!

Schreib Dir doch einfach eine Klasse? Wo ist denn das Problem?!

Wenn ich einen Wert aus ner ini haben will, dann mach ich das mit meiner Klasse so:

C-/C++-Quelltext

1
unsigned long get_value (const std::basic_string<wchar_t>& section, const std::basic_string<wchar_t>& key, const std::basic_string<wchar_t>& default = L"");

Also was Du da machst ist eher Nonsens.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

5

21.10.2006, 18:48

Ich glaube du missverstehst mich.. Also die Funktion zu schreiben die du da vorgeschlagen hast ist kein Problem, aber die hat gegenüber GetPrivateProfileString auch keine Vorteile, die mir die Konvertierung abnehmen würden, darum gehts mir halt.. Ich muss dann immer noch von jedem String in den passenden Typen casten, und das jedesmal per Hand, ist mir aber zu lästig.

Anonymous

unregistriert

6

21.10.2006, 19:09

rewb0rn
Also irgendwie hast Du keine Kreativität. Warum nicht eine Funktion schreiben die Deinen Rücktyp wiedergibt? Wo ist das Problem?!

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

7

21.10.2006, 19:15

Das könnte der Grund sein^^ Naja ich will halt eine Funktion, die für _alle_ Typen aufrufbar ist.. Ich bastel mir gerade was zusammen, mal schaun was das gibt.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

21.10.2006, 19:29

Gibts für sowas nicht Templates?

Anonymous

unregistriert

9

21.10.2006, 19:37

rewb0rn
Wie David schon sagte: Templatespezialisierung. Alle Datentypen nur in dem Rahmen den Du selber an Datentypen spezifiziert und programmiert hast. Der Compiler kann nicht stinken welchen Datentyp Du wie Konvertiert haben willst.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

10

21.10.2006, 20:54

Ja schon klar... Hier der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
template <class T>
T GetValue(const char* Group, const char* Key, T Default, const char* FileName) {
        T Value(Default);
        GetPrivateProfileStringA(Group, Key, static_cast<char*>(&Default), static_cast<char*>(&Value), sizeof(Value), FileName);
        return Value;
    }

template <class T>
void WriteValue(const char* Group, const char* Key, T Value, const char* FileName) {
        WritePrivateProfileStringA(Group, Key, static_cast<char*>(&Value), FileName);
    }


Geht auch so weit, kommt aber immer nur unlesbares Zeugs raus, was zwar nicht verwunderlich ist, aber blöd (wie gesagt, dann kann ich auch gleich Chunks nehmen).. Abgesehen davon gehts auf diese Art nicht mit Unicode. Bin etwas raus, wäre daher über konkrete Hinweise dankbar.. Vielleicht überseh ich ja einfach irgendwas aber bisher glaub ich kommt man da mit euren Konzepten auch nicht so wirklich weiter.

Werbeanzeige