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

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

1

21.05.2009, 12:48

Eigene Bibliothek

Hi

Ich programmiere gerade ein Paar Teile in einer Konsolenanwendung, die alleine sinnlos aber in einem ganzen Quelltext nützlich wären. Z.B ein Logo ausgeben. Jetzt will ich des aber nicht andauernt in meinen Quelltext kopieren sondern es (warscheinlich) per include einbinden um es zu benutzen. Muss ich dann nur die Datei einbinden?

Danke im Voraus!
Pi mal Daumen = 18.84955592

2

21.05.2009, 12:54

ja

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

3

21.05.2009, 13:48

Danke!
Pi mal Daumen = 18.84955592

4

24.05.2009, 19:41

Du kannst das ganze auch als lib kompilieren und brauchst dann nur den header einbinden, ohne dass die cpp jedesmal mitkompiliert werden muss.
Lieber dumm fragen, als dumm bleiben!

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

5

24.05.2009, 20:17

Du kannst auch alles im Template-Design machen.. so wie sdl... dann brauchste nur includen... hmm allerdings verlängert sich dann auch meistens die Compilerzeit ;)...

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

6

24.05.2009, 20:27

@Databyte
Klingt gut, genauso wollte ich es irgendwie machen! ;)
Aber wie?
Des mit der Compilerzeit ist mir noch recht egal! 8)
Pi mal Daumen = 18.84955592

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

25.05.2009, 16:13

Naja eigentlich ganz einfach:
Du verpackst alle Klassen in Templates und als Parameter nimmst du einfach
immer den char-typen oder wenn du den nicht brauchst nen Platzhalter den du mit void oder so füllst

Kleines Beispiel aus meiner Lib ( die ich allerdings net vervollständigt habe aber manchmal immer noch nutze):
Du willst eine Klasse zum Speichern von Ip´s haben.
Als Template sieht das ganze dann so aus:


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
template<typename T_UsedCStringFormat_>
class TIp_raw
    :   public IN_ADDR,
        public TNotifyAble<TIp_raw<T_UsedCStringFormat_>>
{
public:
    /*
        Konstruktor
    */
    TIp_raw() {}


    /*
        Konstruktor mit Struktur
    */
    TIp_raw( IN_ADDR &_IpAddrStruct );


    /*
        Konstruktor mit String
    */
    TIp_raw( std::basic_string<T_UsedCStringFormat_> const &_IpString );


    /*
        Konstruktor mit Zahlen
    */
    TIp_raw(UCHAR _field1,
            UCHAR _field2,
            UCHAR _field3,
            UCHAR _field4 );


    /*
        Setzt die Ip mit einer Zeichenkette.
        true  = die Zeichenkette hatte das richtige Format
        false = die Zeichenkette hatte nicht das richtige Format ODER die Ip ist 255.255.255.255 !!!!!!!!!
        ( Also nicht verlässlig )
    */
    TNotify Set( std::basic_string<T_UsedCStringFormat_> const &_IpString );


    /*
        Setzt die Ip mit 4 Zahlen
    */
    void Set(   UCHAR _field1,
                UCHAR _field2,
                UCHAR _field3,
                UCHAR _field4 );


    /*
        Gibt die IP in einer Zeichenkette zurück
    */
    std::basic_string<T_UsedCStringFormat_> GetString();


    /*
        Abfragen der Einzelnen IP-Stellen
    */
    UCHAR& GetSpace( UCHAR _Index );



    /*
        []-Operator zum abfragen der einzelnen IpStellen
    */
    inline
    UCHAR& operator [] ( UCHAR _Index );

};



template<typename T_UsedCStringFormat_>
TIp_raw<T_UsedCStringFormat_>
    ::TIp_raw( IN_ADDR &_IpAddrStruct )
{
    // Einfach die Struktur kopieren

    S_un.S_addr = _IpAddrStruct.S_un.S_addr;
}

// ... Hier weitere Funktionsdefinitionen ( hab ich hier aus Platzgründen weggelassen)


Diese Klasse ist nun sowohl für Unicode als auch für normale chars zu gebrauchen...
und das beste man kann sogar beide typen benutzen !
Denn man wird durch keine Compiler-einstellung eingeschränkt ( ok... das bitte nicht falsch verstehen ;) )

Weiterer Vorteil: wenn du es richtig schreibst, ist es sogar mehr oder weniger
Plattformunabhängig
( bei diesem beispiel nicht, weils das mit winsock zusammenarbeitet)

Fals du noch mehr Wissen über Templates brauchst, frag mich (icq) oder so
oder schau hier nach:
http://www.cpp-tutor.de/cpp/le15/le15_01.htm
http://www.cpp-tutor.de/cpp/le15/le15_02.htm
http://www.cpp-tutor.de/cpp/le17/le17_01.htm

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

8

25.05.2009, 21:14

Hi

Danke erstmal!

Zitat von »"Databyte"«

Kleines Beispiel aus meiner Lib ( die ich allerdings net vervollständigt habe aber manchmal immer noch nutze):
1) Ab wann kann man eine lib als vollständig bezeichnen?

Zitat von »"Databyte"«

Naja eigentlich ganz einfach:
:shock: :shock:

2) Was sind denn Ip's?

Ich bin in meinem Buch noch nicht so weit aber durch die Tutorials und dem Quelltext werde ich mich durcharbeiten ;)

@Jonathan_Klein
Das ist doch das gleiche wie von Databyte oder? :?

Danke im Voraus :D
Pi mal Daumen = 18.84955592

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

9

26.05.2009, 14:23

Zitat von »"FLO2"«

Zitat von »"Databyte"«

Kleines Beispiel aus meiner Lib ( die ich allerdings net vervollständigt habe aber manchmal immer noch nutze):

1) Ab wann kann man eine lib als vollständig bezeichnen?


Naja ab dann, wenn alle Elemente, die man sich vorgenommen hat implementiert sind ;)
Was ich zum Beispiel noch machen wollte is ne Http-Klasse,
rar-sockets, Consolen-input.. etc...
Aber das brauch man eigentlich net selber machen, weils das meistens schon gibt ;)
Und habs halt net wirklich gebraucht und hab dann irgendwann aufgehört meine Lib ( mit dem unglaublichen Namen "T") weiterzuentwickeln...
ABer ich benutze immer noch sachen daraus... also würd ich schon sagen, dass es sich gelohnt hat ;)


Zitat von »"FLO2"«

2) Was sind denn Ip's?


Hmmm.... Netzwerkaddressen ? ;)
Jeder Computer, der am Netzwerk hängt hat ne Ip....
Kennste vieleicht: 127.0.0.1 ist zum beispiel "localhost"
weiteres beispiel: 192.168.0.5 oder so
Weitere Infos gibts hier: http://de.wikipedia.org/wiki/IP-Adresse

Zitat von »"FLO2"«

Ich bin in meinem Buch noch nicht so weit aber durch die Tutorials und dem Quelltext werde ich mich durcharbeiten ;)


Nein ! Ließ erstmal dein Buch weiter und beschäftige dich dann mit Templates ( sofern das nicht in deinem Buch vorkommt)
Es macht wenig Sinn sich jetzt schon durch den Quellcode zu arbeiten,
weil der doch schon ein paar fortgeschrittene Elemente enthält.
(Naja ok... was ist schon Fortgeschritten ;) aber mach erstmal dein Buch)

Zitat

@Jonathan_Klein
Das ist doch das gleiche wie von Databyte oder? :?


Nein, es ist nicht das gleiche.
Es gibt Library´s und .lib-files.
Library´s, was ja auch übersetzt Bibliotek heißt, sind einfach Sammlungen von Funktionen und Klassen.
.lib-Files enthalten diese. Das bedeutet, das .lib-Files Funktionen und Klassen enthalten. Und zwar sind diese dann schon Compiliert !
Man includet dann nur noch die Header-files der lib, bindet die Lib ein und schon hat man zusätzliche Funktionen.
Der Vorteil, von Libs ist, dass sie ja bereits compiliert sind, was bedeutet,
man kann erstens den Code nicht mehr sehen ( was für die Verbreitung durchaus wicht sein kann )
und das compilen geht wesentlich schneller, da ja die ganzen lib-quelltexte schon compiliert sind.
Die ganzen .cpp-datein der library müssen nicht mehr compiliert werden
und dass macht schon nen gewaltigen unterschied....
Das Problem ist, dass lib´s relativ unflexiebel sind. man müsste also eine
für normal, eine für Unicode, eine für debuf, eine für release und so weiter machen,
und das is schon nen bisl doof....

Bei meinem Code, hab ich nur von einer Library gesprochen, da sie
Funktionen und Klassen enthält... es wird aber kein lib-file enstehen ;)
und dass soll es auch nicht, denn wie man sieht kann man sogar
nomal und unicode benutzen, ohne in den projekteigenschaften etwas umstellen zu müssen.

FLO2

Treue Seele

  • »FLO2« ist der Autor dieses Themas

Beiträge: 221

Beruf: Schüler

  • Private Nachricht senden

10

26.05.2009, 16:05

Also das mit den IP's hab ich einigermaßen verstanden.

Jip, es kommt in meinem Buch vor(C++ für Spieleprogrammierer), Template-Klassen und Funktion. ;)
Dann ist die Librairy um einiges komfortabler?!
Pi mal Daumen = 18.84955592

Werbeanzeige