Gå til innhold

daysleper

Medlemmer
  • Innlegg

    296
  • Ble med

  • Besøkte siden sist

Innlegg skrevet av daysleper

  1. Kanskje det finnes to former for hackere - de "gode" og de "onde".

     

    Begge liker å forske på ting, men den første gruppen gjør det av uskyldig nysjerrighet - den andre for å utnytte noe for å kunne tjene på det selv.

     

    Så når man sier "hacker" - må man kanskje ut i fra sammenhengen -- hvem som sier det, selv finne ut om det menes de "gode" eller "onde".

  2. Jeg kan ikke fordra Windows og har ikke råd til å betale for en compiler - så jeg kan istedet vise deg et eksempel der jeg bruker posix-threads som er mer Linux'ish.

     

    Bruker her MinGW som compiler under Windows, og har MingGW installert i C:MinGW -katalogen.

    MinGW finner du her: http://www.mingw.org/ (er en del forskjellige pakker å velge i når man skal laste ned, jeg lastet ned pakken med navnet "MinGW")

    Siden pthreads-biblioteket ikke følger med MinGW compileren må du laste ned dette selv.

     

     

    Du trenger

    Biblioteket:

    ftp://sources.redhat.com/pub/pthreads-win...libpthreadGCE.a

    ..som du legger i C:MinGWlib og renamer til libpthread.a

    .. og headerfilene:

    ftp://sources.redhat.com/pub/pthreads-win...clude/pthread.h

    ftp://sources.redhat.com/pub/pthreads-win...include/sched.h

    ftp://sources.redhat.com/pub/pthreads-win...ude/semaphore.h

    ..som du legger i C:MinGWinclude

     

     

    Eksempelkode

    #include <iostream>
    
    #include <sstream>
    
    #include <pthread.h>
    
    #include <unistd.h>
    
    
    
    using namespace std;
    
    
    
    // Dette for at visse ting skal være likt mellom Linux og Win32(MinGW)
    
    #ifdef _WIN32
    
    #define strupr _strupr
    
    #define strncasecmp _strnicmp
    
    #ifdef __GNUC__
    
    #define sleep(t) _sleep(t*1000)
    
    #define kbhit _kbhit
    
    #endif
    
    #endif
    
    
    
    
    
    stringstream buffer; // denne kan brukes til å kommunisere mellom prosessene hare() og rev()
    
    pthread_mutex_t mutex;
    
    
    
    void *hare(void* param)
    
    {
    
    int* i = static_cast<int*>(param);
    
    *i++;
    
    for(;;){
    
     cerr << "Hare" << endl;
    
     pthread_mutex_lock(&mutex);
    
     buffer << "Hare ";
    
     pthread_mutex_unlock(&mutex);
    
     sleep(2);
    
    }
    
    }
    
    
    
    
    
    void *rev(void* param)
    
    {
    
    int* i = static_cast<int*>(param);
    
    *i++;
    
    for(;;){
    
     cerr << "tRev" << endl;
    
     pthread_mutex_lock(&mutex);
    
     buffer << "Rev ";
    
     pthread_mutex_unlock(&mutex);
    
     sleep(4);
    
    }
    
    }
    
    
    
    
    
    int main(int argc, char** argv)
    
    {
    
    pthread_t hareThread;
    
    pthread_t revThread;
    
    pthread_mutex_init(&mutex, 0);
    
    
    
    cerr << "buffer før kjøring: "" << buffer.str() << """ << endl;
    
    
    
    cerr << "--" << endl;
    
    
    
    pthread_create(&hareThread, 0, hare, 0);
    
    pthread_create(&revThread, 0, rev, 0);
    
    sleep(10);
    
    pthread_mutex_lock(&mutex);
    
    
    
    cerr << "--" << endl;
    
    cerr << "buffer etter kjøring: "" << buffer.str() << """ << endl;
    
    return(0);   
    
    } 
    
    

     

    ..lagre filen som main.cpp og kompiler den slik:

     

     

    Kompilering

    Regner med at du vet hvordan man får frem en kommandolinje i Windows og at du kan bruke den?

    g++ -g -Wall main.cpp -o main -lpthread

    ..det er viktig at -lpthread kommer bakerst!

    Hvis du i stedet velger å bruke Linux :) , er compileringen helt lik.

     

     

    Kjøring

    Når jeg kjører programmet får jeg denne utskriften:

    buffer før kjøring: ""

    --

    Hare

    Rev

    Hare

    Rev

    Hare

    Hare

    Rev

    Hare

    --

    buffer etter kjøring: "Hare Rev Hare Rev Hare Hare Rev Hare "

     

     

    Kort forklaring av mutex

    Mutex er et begrep som gjelder thread-programmering generellt.

    pthread_mutex_lock saken gjør at funksjonene hare() og rev() ikke skriver til buffer samtidig - noe som kunne gitt resultater som:

     

    buffer etter kjøring: "HaRerve HaRreve HarReev RevH are HareRe HvHare "

     

     

    Her er en oversikt over IPC-teknologier spesiellt for Windows: http://msdn.microsoft.com/library/default....munications.asp

  3. Etter litt roting compilerer koden, og "diffen", patchen eller endringene ser slik ut:

     

    - forran linja betyr fjernet linje.

    + forran linja betyr ny linje.

     

    diff mytcl.old mytcl.cc -u

    --- mytcl.old	2003-10-10 19:32:09.000000000 +0200
    
    +++ mytcl.cc	2003-10-10 23:42:44.000000000 +0200
    
    @@ -205,7 +205,7 @@
    
    
    
    // -------------------------------------------------------------
    
    //
    
    -int sql_command(ClientData clientData, Tcl_Interp *interp, int argc, char **argv) {
    
    +int sql_command(ClientData clientData, Tcl_Interp *interp, int argc, const char **argv) {
    
      int ret;
    
    
    
      if(argc == 1) {
    
    @@ -221,7 +221,7 @@
    
    
    
        // -----------------------------------
    
        if(strcmp(argv[1], "connect")==0) {
    
    -      c = mgr->connect(argc-2, argv+2);
    
    +      c = mgr->connect(argc-2,(char**) argv+2);
    
          if(c < 0) {
    
            char *basemsg = "Unable to Connect: ";
    
    
    
            char *errmsg = mgr->getErrorMsg();
    
    @@ -239,7 +239,7 @@
    
    
    
        } else if(strcmp(argv[1], "escape")==0) {
    
          if(!(argc < 3)) {
    
    -        ret = sql_escape(interp, argv[2]);
    
    +        ret = sql_escape(interp, (char*)argv[2]);
    
          } else {
    
            Tcl_SetResult(interp, "Usage: sql escape string", TCL_STATIC);
    
            ret = TCL_ERROR;
    
    @@ -253,7 +253,7 @@
    
          if(argc <= 2) {
    
            Tcl_SetResult(interp, "Usage: sql command ?handle?", TCL_STATIC);
    
            ret = TCL_ERROR;
    
    -      } else if((connid = stripPrefix(argv[2], HANDLE_PREFIX)) < 0) {
    
    +      } else if((connid = stripPrefix((char*)argv[2], HANDLE_PREFIX)) < 0) {
    
            Tcl_AppendResult(interp, "mytcl: Invalid handle: ", argv[2], ".", NULL);
    
            ret = TCL_ERROR;
    
          } else if(!mgr->inUse(connid)) {
    
    @@ -265,15 +265,15 @@
    
            Connection *conn = mgr->connection(connid);
    
            // take care of the command:
    
            if(strcmp(argv[1], "exec") == 0) {
    
    -          ret = sql_exec(interp, conn, argv[3]);
    
    +          ret = sql_exec(interp, conn, (char*)argv[3]);
    
            } else if(strcmp(argv[1], "query") == 0) {
    
    -          ret = sql_query(interp, conn, argv[3]);
    
    +          ret = sql_query(interp, conn, (char*)argv[3]);
    
            } else if(strcmp(argv[1], "endquery") == 0) {
    
    -          ret = sql_endquery(interp, conn, argv[3]);
    
    +          ret = sql_endquery(interp, conn, (char*)argv[3]);
    
            } else if(strcmp(argv[1], "fetchrow") == 0) {
    
    -          ret = sql_fetchrow(interp, conn, argv[3]);
    
    +          ret = sql_fetchrow(interp, conn, (char*)argv[3]);
    
            } else if(strcmp(argv[1], "numrows") == 0) {
    
    -          ret = sql_numrows(interp, conn, argv[3]);
    
    +          ret = sql_numrows(interp, conn, (char*)argv[3]);
    
            } else if(strcmp(argv[1], "affectedrows") == 0) {
    
              ret = sql_affectedrows(interp, conn);
    
            } else if(strcmp(argv[1], "insertid") == 0) {
    
    @@ -281,7 +281,7 @@
    
            } else if(strcmp(argv[1], "disconnect") == 0) {
    
              ret = sql_disconnect(interp, mgr, connid);
    
            } else if(strcmp(argv[1], "selectdb")==0) {
    
    -          ret = sql_selectdb(interp, conn, argv[3]);
    
    +          ret = sql_selectdb(interp, conn, (char*)argv[3]);
    
            } else if(strcmp(argv[1], "isconnected")==0) {
    
              ret = sql_isconnected(interp, conn);
    
            } else {
    
    

  4. Jeg mente at du skrev inn linjenummeret manuellt - dette fordi linjenummerene i feilmeldingene ikke ser ut til å stemme med koden på den linken ..

     

    F.eks:

    mytcl.cc:220: error: `ret' undeclared (first use this function)

     

    Det finnes ingen ret på den linjen i koden fra den linken.. så koden du compilerer må se annerledes ut, altså ha flere eller færre linjer. (Er det mulig #include kan ha noe med dette å gjøre?)

     

    Du kan eventuellt gi meg en temp. shell/ssh-konto - så kan jeg gå inn på maskinen din og compilere og se selv. :)

  5. Ja - det sier seg selv at den får problemer her.

     

    Du kan ta en kopi av argv som ikke er const og jobbe mot denne i stedet. Bruk strcpy().

     

    Kunne jeg sett koden? Det om ret så litt rart ut ..

    Ta med første linjenummer i det du paster, eks:

    linje 220: kode();
    
    kode();
    
    kode();
    
    

     

    ..så ser jeg hva feilmeldingene peker på.

     

    Det kan også hende det er lurere å endre det "fra andre siden", men dette vet jeg lite om siden jeg ikke vet hvordan resten av programmet eller headere rundt det forventer at ting skal se ut.

    Altså at du i stedet for å forandre på sql_command sitt format (type), så endrer du på Tcl_CreateCommand sin functor-parameter slik at den matcher og kan ta i mot en functor uten const char** .. hvis u skjønner.. Kan som sagt ikke vite om det er en god idé sett fra her jeg står.

  6. Jeg kan si med en gang at du må caste char** til const char** eksplisitt i koden din.

     

    Koden som utløser feilmeldingen:

    Tcl_CreateCommand(interp, "sql", sql_command ,(ClientData)s, (Tcl_CmdDeleteProc *)NULL);

     

    Feilmeldingen:

    invalid conversion from `int (*)(void*, Tcl_Interp*, int, char**)' to  

                                     `int (*)(void*, Tcl_Interp*, int, const char**)'

     

     

    sql_command, som blir sendt til Tcl_CreateCommand ser slik ut:

    int sql_command(ClientData clientData, Tcl_Interp *interp, int argc, char **argv);

     

    Du må med andre ord endre char **argv til const char** argv.

     

    ..det kan hende du "breaker" noe annet som forventer at argv -ikke- er const når du gjør dette.

     

    Det kan ofte være lurt å endre på linjen som feilmeldingen peker på:

    Tcl_CreateCommand(interp, 
    
    "sql", 
    
    sql_command, 
    
    (ClientData)s, 
    
    (Tcl_CmdDeleteProc *)NULL);
    
    

     

    ..da ville du med en gang sett at det var linjen sql_command compileren snakket om.

  7. Edit:

    La til denne som en kodesnutt, gå hit for event. siste versjon!

     

    #include <iostream>
    
    #include <map>
    
    
    
    using namespace std;
    
    
    
    template<int ndim, typename T, typename DIM = int>
    
    class Tabell;
    
    
    
    // 2 Dimensjoner
    
    template<typename T, typename DIM>
    
    class Tabell<2, T, DIM> : public std::map<DIM, std::map<DIM, T> > {
    
    };
    
    
    
    
    
    // 3 Dimensjoner
    
    template<typename T, typename DIM>
    
    class Tabell<3, T, DIM> : public std::map<DIM, std::map<DIM, std::map<DIM, T> > > {
    
    };
    
    
    
    
    
    // 4 Dimensjoner
    
    template<typename T, typename DIM>
    
    class Tabell<4, T, DIM> : public std::map<DIM, std::map<DIM, std::map<DIM, std::map<DIM, T> > > > {
    
    };
    
    
    
    
    
    // osv.  .5, 6, .. 1000 dimensjoner.. :)
    
    
    
    
    
    
    
    int main()
    
    {
    
    Tabell<2, char> tabell2Da; // 2-dimensjonell tabell som lagrer char'er ved hjelp av templates (lagret på akser av den defaulte typen int)
    
    
    
    int const xMax = 20;
    
    int const yMax = 10;
    
    
    
    // lager er "spillebrett" 
    
    for(int y = 0; y < yMax; y++)
    
     for(int x = 0; x < xMax; x++)
    
     	tabell2Da[x][y] = '.';
    
    
    
    
    
    cerr <<  "tegner brettet" << endl;
    
    for(int y = 0; y < yMax; y++) {
    
     for(int x = 0; x < xMax; x++)
    
     	cerr << tabell2Da[x][y];
    
     cerr << endl;
    
    }
    
    cerr << endl;
    
    
    
    cerr << "setter et kryss" << endl;
    
    tabell2Da[2][3] = 'X';
    
    
    
    
    
    cerr <<  "tegner brettet" << endl;	
    
    for(int y = 0; y < yMax; y++) {
    
     for(int x = 0; x < xMax; x++)
    
     	cerr << tabell2Da[x][y];
    
     cerr << endl;
    
    }
    
    cerr << endl;
    
    
    
    cerr << "setter en sirkel" << endl;
    
    tabell2Da[3][4] = 'O';
    
    
    
    cerr <<  "tegner brettet" << endl;	
    
    for(int y = 0; y < yMax; y++) {
    
     for(int x = 0; x < xMax; x++)
    
     	cerr << tabell2Da[x][y];
    
     cerr << endl;
    
    }
    
    cerr << endl;	
    
     
    
    
    
    // andre eksempler på ting man kan lagre i disse flerdimensjonale tabellene:
    
    Tabell<2, int, double> tabell2Db; // 2-dimensjonell tabell med inter ved hjelp av templates lagret på akser av typed double
    
    Tabell<3, int, double> tabell3Da; // 3-dimensjonell tabell med inter lagret på akser av typen double
    
    Tabell<3, double> tabell3Db; // 3-dimensjonell tabell med double'r (lagret på akser av den defaulte typen int)
    
    
    
    return(0);
    
    }
    
    

     

    Når jeg kjører programmet får jeg denne utskriften:

     

    tegner brettet

    ....................

    ....................

    ....................

    ....................

    ....................

    ....................

    ....................

    ....................

    ....................

    ....................

     

    setter et kryss

    tegner brettet

    ....................

    ....................

    ....................

    ..X.................

    ....................

    ....................

    ....................

    ....................

    ....................

    ....................

     

    setter en sirkel

    tegner brettet

    ....................

    ....................

    ....................

    ..X.................

    ...O................

    ....................

    ....................

    ....................

    ....................

    ....................

     

     

    Edit:

    La til denne som en kodesnutt, gå hit for event. siste versjon!

  8. Trenger ikke new til det, du kan bruke std::map og noen enkle typedefs:

     

    #include <iostream>
    
    #include <map>
    
    
    
    using namespace std;
    
    
    
    typedef map<int, map<int, int> > Tabell2D;
    
    typedef map<int, map<int, map<int, int> > >Tabell3D;
    
    
    
    int main()
    
    {
    
    Tabell2D tabell2D; // lager en 2-dimensjonell tabell med int'er
    
    Tabell3D tabell3D; // lager en 3-dimensjonell tabell
    
    tabell2D[2][2] = 123;
    
    tabell3D[1][2][3] = 123;
    
    cerr << tabell3D[1][2][3] << endl;
    
    return(0);
    
    }

     

    Paster en template-basert versjon, kanskje bedre altså, om 5 minutter .. :)

     

    En ting:

    Nå har ikke jeg så kjennskap til matte og slikt, men er Tabell2D egentlig 3dimensjonal sånn av definisjon? ..og Tabell3D 4dimensjonal?

    Jeg roter sikkert .. :)

  9. Ok, legger den til under "FAQ: 2.3 - Anbefalte bøker for ikke-så-nybegynnere?" siden den kanskje har mer med avansert programmering og implementering av egne algoritmer å gjøre. Tror ikke den er for nybegynnere som vil lære generell C++ hvis du ikke mener noe absolutt helt annet da .. :)

     

    Har ikke boken selv, men fannt en innholdsfortegnelse på den:

    1. Software Engineering Principles and C++ Classes

    2. Object-Oriented Design (OOD) and C++

    3. Pointers and Array-Based Lists

    4. Standard Template Library (STL)

    5. Linked Lists

    6. Recursion

    7. Stacks

    8. Queues

    9. Search Algorithms

    10. Sorting Algorithms

    11. Binary Trees

    12. Graphs

    13. Standard Template Library (STL) II

    Appendix A Reserved Words

    Appendix B Operator Precedence

    Appendix C Character Sets

    Appendix D Operator Overloading

    Appendix E Header Files

    Appendix F Additional C++Topics

    Appendix G C++ for Java Programmers

    Appendix H References

    Appendix I Answers to Selected Exercises

     

    ..og det er derfor jeg tror den har mest med algoritmer og mer avanserte ting å gjøre uten at jeg har selve boken. :)

  10. Vet ikke helt hva du lurer på, men her er litt så du kommer i gang i hvertfall. :)

    #include <iostream>
    
    #include <pthread.h>
    
    #include <unistd.h>
    
    
    
    using namespace std;
    
    
    
    
    
    void *hare(void* param)
    
    {
    
    for(;;){
    
     cerr << "Hare" << endl;
    
     sleep(2);
    
    }
    
    }
    
    
    
    
    
    void *rev(void* param)
    
    {
    
    for(;;){
    
     cerr << "tRev" << endl;
    
     sleep(4);
    
    }
    
    }
    
    
    
    
    
    main(int argc, char** argv) 
    
    {
    
    pthread_t hareThread;
    
    pthread_t revThread;
    
    
    
    pthread_create(&hareThread, 0, hare, NULL);
    
    
    
    pthread_create(&revThread, 0, rev, NULL);
    
    
    
    sleep(10);
    
    return(0);	
    
    }
    
    

     

    Lagre filen som test.cpp og kompiler den slik:

    g++ test.cpp -g -Wall -o test -lpthread

    Etter 10 sekunder avsluttes programmet og de 2 trådene som ble laget avsluttes også.

    Jeg tar alle utfordringer - spesiellt hvis jeg får litt igjen når jeg lykkes. ;)

  11. [Til FAQ'en]

     

    FAQ: 2.4 - Tutorialer, dokumentasjon og oppslagsverk på Internett?

     

    Ingen ting kan måle seg med en god bok, men det finnes online-resurser også.

     

    Hvis du har lyst til å begynne å lese med en gang, kan du laste ned Bruce Eckels bøker som er rimelig gode og gratis tilgjengelig her:

    Del 1: Thinking in C++, 2nd edition, Volume 1

    Del 2: Thinking in C++, 2nd edition, Volume 2

    Vol. 1 inneholder en intro om C.

     

    http://www.cs.cf.ac.uk/Dave/C/ En bok om C (bias mot Linux/Unix. Virker god og tar for seg andre ting enn bare språket.) Takk til Sugx

     

    Det finnes masse på google, men mye er av gammel dato og stemmer ikke med de nye standarene.

     

     

    Andre FAQ'er

    http://www.parashift.com/c++-faq-lite/

    http://groups.google.com/groups?hl=en&lr=&...mmering.c%2B%2B (det postes en norsk FAQ her - har også sett en versjon av denne på web, men linken er død(?))

     

     

    Tutorialer

    http://www.fredosaurus.com/notes-cpp/

    http://www.cpp-home.com/

    http://www.gametutorials.com/Tutorials/c++/Cpp_Pg1.htm

    http://www.planetcpp.com/

    http://www.relisoft.com/book/index.htm

    http://cplus.about.com/library/blcplustut.htm - Denne ser ut til å være nyere enn mange andre (den stemmer med standaren)

    http://www.cplusplus.com/

    http://www.arachnoid.com/cpptutor/index.html

    http://www.howstuffworks.com/c.htm - Denne tar for seg C.

    http://www.cprogramming.com/tutorial.html - Denne er ikke helt ny, (men er kanskje god fordet?)

    http://www.cplusplus.com/doc/tutorial/ - Denne er heller ikke helt ny.

     

    Referanser og oppslagsverk

    http://cppreference.com - Kjekk ved kjappe oppslag når du lurer på noe fra C++'s standard bibliotek. Denne synes jeg er god

    selv om den ikke er komplett.

    http://gcc.gnu.org/onlinedocs/libstdc++/la.../annotated.html - Denne er mer detaljert og mer komplett.

    http://www.sgi.com/tech/stl/table_of_contents.html - Hørt et sted at denne ikke stemmer -helt- overens med standaren?

    http://www.dinkumware.com/manuals/reader.aspx?lib=cpp

    http://www.gnu.org/manual/glibc-2.2.5/html...node/index.html

    http://msdn.microsoft.com/library/default....by_Category.asp

    http://msdn.microsoft.com/library/default....TML/LIB_CPP.asp

     

     

    Win32 relatert

    http://home.no.net/dubjai/contents.html

    http://msdn.microsoft.com/library/en-us/sd....asp?frame=true (denne kan være lur å laste ned)

     

    I linux har du kommandoene man, info og hvis du bruker Gnome/KDE et grafisk frontend til disse.

  12. Ta en titt på www.dyndns.org der kan man få et:

     

    [domenenavn] ---> [ikke fast ip]

     

    ..man laster ned en klient som kjøres i bakgrunnen på maskinen. Den oppdaterer domenenavnets ip til å matche din maskins ip (som er dynamisk, og kan endre seg med jevne mellomrom).

     

    Det finnes flere "domene-etter-navn" å velge i mellom:

    dittnavn.ath.cx

    dittnavn.homeip.org

    ..osv.

     

    Slik vil folk kunne skrive inn dittnavn.ath.cx i stedet for en ip-adresse når dem skal koble seg til f.eks. http-serveren (apache eller iis) eller ftp-serveren din.

    Man kan også få .net/.org/.com etc. -adresser hos dem, men disse må man betale for.

  13. Sagt om Dev-C++:

    Eneste ulemper er at programmene dine blir litt trege, men det merkes først når du lager store krevende programmer.

     

    Jeg er ikke helt enig i dette, fordi:

    Dev-C++ bruker GCC 3.*.* (eller MinGW som den "kalles" under Win32) som compiler som er en av de beste (den beste?) compilerene du kan få tak i.

     

    Bare husk dette:

    - Du må spesifisere at du vil optimalisere koden.

    - Du må slå av generering av informasjon for debugging.

     

    http://www.willus.com/ccomp_benchmark.shtml?p11

     

    For det andre så stemmer den med standaren, noe flere av Microsofts compilere ikke greier å leve opp til.

     

    http://lists.trolltech.com/qt-interest/200...ead00291-0.html

     

    http://www.coyotegulch.com/reviews/intel_c...gcc_bench2.html

     

    og..

     

    Selv bruker jeg Emacs og gdb + ddd til debugging. :)

  14. Dummies* -bøkene er desverre sjeldent gode. :( Men jeg tror de lærer deg hvordan du legger sammen tall?

     

    Jeg trodde C++ var ganske tungt og lære seg, men ikke tungt. Det er jo vanskelig.

     

    Ja, det er det.

     

    Jeg får ikke til og se æ,ø,å i console en gang.

     

    Ikke bry deg om det - det er en norsk-tegnsett-Windows-ting.

    Bruk konsollet til å lære i og til å skrive ut debug-meldinger fra de grafikkbaserte programmene du lager siden.

     

    I visual basic 6 så ser man liksom det grafiske, den er "finere" på en måte.

    I C++ (så langt som jeg har kommet ivertfall) så sitter man bare der, med en kjedlig konsoll/console og får ikke engang æøå til og fungere.

     

    Visual Basic 6 ble skrevet i C++, hva har du å si til det? :D

     

    Men jeg vet fint lite om det, har som sagt ikke lært stort ennå. Vet ikke hvordan jeg får kalkulatoren til og gå i "loop" ennå :oops:

    Men jeg driver og leser en engelsk tutorial, en veldig bra en.

     

    Det er bra. :)

    Ta tiden til hjelp -- ikke vær alt for hard mot deg selv, du finner ut av det til slutt; husk at det er reisen som er målet - ikke selve målet.

    :woot:

     

    ... , uheldigvis er den på engelsk.

     

    Driver å skriver litt på en norsk tutorial. Hvis du er intressert så finner du et eksempel på en "while-loop" der: http://nostdal.net/forum/viewtopic.php?p=163#163 Ikke noen forklaringer der foreløpig, men regner med at jeg skal få skrivd litt ... :-)

  15. Tror det har mye med min personlige innfallsvinkel å gjøre. Boka går veldig i dybden når det gjelder C++ templater, men det blir mye av det samme som tas opp i Modern C++ (og en del basics jeg kjente til fra før) Design. Modern C++ Design hadde på forhånd fått opp øynene mine for teknikker som rekursive templater, og er nok en del mer tungt fordøyelig enn Vandevoorde/Josuttis. Derimot kunne jeg trengt en skikkelig referanse for standard-biblioteket (Josuttis).

     

    Ok,

     

    Så man burde kanskje lære språket, så biblioteket og avslutte med templates?

     

    Starte med språket (bøker fra nybegynner tråden).

     

    For så å gå videre med Josuitts bok om standardbiblioteket (The C++ Standard Library: A Tutorial and Reference (Nicolai M. Josuttis)).

    Slik at man kan bruke det som allerede eksisterer.

     

    ..og videre med Josuitts bok om templates (C++ Templates: The Complete Guide (David Vandervoorde, Nicolai M. Josuttis)). Slik at man kan begynne å lage egne, mer avanserte, ting selv.

     

    --og så, tilslutt eller kanskje i stedet for den over hvis man føler at man kan det som er basic innen templates; Modern C++ Design.

     

    "Er så maange bøker..!" :)

×
×
  • Opprett ny...