Close
Duke shfaqur rezultatin -9 deri 0 prej 6
  1. #1
    i/e regjistruar
    Anėtarėsuar
    17-11-2006
    Postime
    81

    C++ - Struktura "sfiduese"

    Duke lexuar nje header (*.h) fare te vogel qe shkarkova ne internet, ndesha ne nje konstrukt ne dukje te thjeshte (4 - 5 rreshta C++) ne te cilin perdoren vetem 4 C++ keywords (struct, template, typename dhe typedef), por qe mua me hengri mbi 5 minuta per ta kuptuar (qe duke pasur parasysh se i gjithe kodi rroket me nje shikim, eshte vertete shume)

    Kodi:
    // If T has a typedef _CreatorClass, Derived would pick it from its base.
    // If T does not define _CreatorClass, the definition is picked from the next
    // enclosing scope, which is ChooseCreatorClass::_CreatorClass, or Default
    
    template 
    struct ChooseCreatorClass
    {
        typedef Default _CreatorClass;
        struct Derived : private T
        {
            typedef _CreatorClass CreatorClass;
        };
        typedef typename Derived::CreatorClass CreatorClass;
    };
    Ne fakt e vetmja gje qe nuk arrija te kuptoja (ne veshtrim te pare) ishte ekzistenca e struktures se brendshme - arsyeja e vetme e ekzistences se saj eshte nje typedef, por perse valle ky typedef kishte nevoje te futej brenda nje strukture?

    Une nuk po i jap pergjigje kesaj pyetje qe tani, per t'i lene kohe kujtdo qe ka deshire te jape pergjigjen e tij.

    Shenim: Fragmenti qe paraqita eshte i plote, pra i gjithe shpjegimi eshte aty, madje komentet ne Anglisht (te autorit) e "shprehin" qellimin.

  2. #2
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Interesant kodi mė lart. Mė dha mundėsinė tė freskoja (dhe zgjeroja) njohuritė e C++. Pasi e studiova pėr disa minuta arrita ta kuptoja se ēfarė po mundohet tė bėjė programuesi.

    Siē e shpjegojnė dhe komentet, qėllimi i ChooseCreatorClass ėshtė qė tė zgjedhė midis tipit _CreatorClass qė pėrmbahet brėnda tipit T dhe tipit tė parazgjedhur, Default. Pra, nėse tipi T nuk pėrmban _CreatorClass, atėherė ChooseCreatorClass pėrdor tipin Default.

    Pėr ata qė dinė Java, kjo do ishte e thjeshtė duke pėrdorur reflektimet (reflection), por C++ nuk ka reflektime, kėshtu qė autori ka shkruajtur kodin e koklavitur mė sipėr i cili shfrytėzon rregullat e shtrirjeve (scope) pėr tė zgjedhur _CreatorClass e duhur.


    Shtrati Global::
    Krijojmė njė shabllon me dy parametra, tipin T dhe tipin Default (i parazgjedhur).
    template
    struct ChooseCreatorClass
    {
    Shtrati Global::ChooseCreatorClass
    Riemėrtojmė tipin Default si _CreatorClass, i njėjti emėr me tipin qė pėrmban parametri T. Pra, krijojmė ChooseCreatorClass::_CreatorClass;
    typedef Default _CreatorClass;

    Kėtu krijojmė njė tip qė trashėgon nga tipi T me qėllim qė tė hyjmė nė shtratin (scope) tė tipit T. Pra, duam tė kontrollojmė nėsė ekziston T::_CreatorClass.
    struct Derived : private T
    {

    Shtrati Global::ChooseCreatorClass::T::Derived
    Riemėrtojmė tipin _CreatorClass si CreatorClass. Kėtu ndodh e gjithė magjia, sepse si rregull, nėse C++ nuk gjen tipin _CreatorClass nė shtratin e brėndshėm, duhet tė kėrkojė atė nė shtratin e jashtėm. Nėse nuk e gjen as aty, duhet tė kėrkojė nė shtratin tjetėr mė tė jashtėm, e kėshtu me radhė deri sa arrin nė shtratin Global. Nėse nuk gjendet as aty, pėrpiluesi nxjerr gabim. Konkretisht, nė kėtė rast C++ do kontrollojė mė parė shtratin Global::ChooseCreatorClass::T::Derived, pastaj Global::ChooseCreatorClass::T, pastaj Global::ChooseCreatorClass, pastaj Global. Pra, nėse T::_CreatorClass nuk ekziston, atėherė C++ do pėrdorė ChooseCreatorClass::_CreatorClass tė cilin e krijuam mė lart si emėrtim tė tipit Default.
    typedef _CreatorClass CreatorClass;
    };

    Tashmė, Derived:CreatorClass pėrmban tipin e duhur, por e riemėrtojmė vetėm si CreatorClass me qėllim qė tė fshehim ndihmėsin Derived.
    typedef typename Derived::CreatorClass CreatorClass;
    };

    Kėtu kemi arritur pėrsėri nė shtratin Global:: dhe mund tė pėrdorim ChooseCreatorClass::CreatorClass ku T dhe Default janė parametrat.


    Mė poshtė po hedh njė shembull qė vė nė provė shpjegimin mė lart.


    Kodi PHP:
    #include <iostream>
    #include <string>

    using namespace std;

    class 
    KlasaSakte {
    public:
      
    string merrPergjigjen() {
        return 
    "Klasa e sakte";
      }
    };

    class 
    KlasaMeKlasenSakte {
    public:
      
    typedef KlasaSakte _CreatorClass;
    };

    class 
    KlasaPaKlasenSakte {};


    class 
    KlasaParazgjedhur {
    public:
      
    string merrPergjigjen() {
        return 
    "Klasa e parazgjedhur";
      }
    };


    template <typename Ttypename Default>
    struct ChooseCreatorClass
    {
        
    typedef Default _CreatorClass;
        
    struct Derived : private T
        
    {
            
    typedef _CreatorClass CreatorClass;
        };
        
    typedef typename Derived::CreatorClass CreatorClass;
    };


    int main(int argcchar *argv[])
    {

        
    // kjo duhet tė nxjerrė "Klasa e sakte"
        
    ChooseCreatorClass<KlasaMeKlasenSakteKlasaParazgjedhur>::CreatorClass sh1;
        
    cout << sh1.merrPergjigjen() << endl;

        
    // kjo duhet tė nxjerrė "Klasa e parazgjedhur"
        
    ChooseCreatorClass<KlasaPaKlasenSakteKlasaParazgjedhur>::CreatorClass sh2;
        
    cout << sh2.merrPergjigjen() << endl;
        
        
    cin.get();
        return 
    EXIT_SUCCESS;


    Nė Microsoft C++ programi punon siē duhet dhe nxjerr pėrgjigjen e saktė:
    Kodi:
    Klasa e sakte
    Klasa e parazgjedhur
    ndėrsa Dev-C++ (gcc 3.4.2) nxjerr pėrgjigje tė gabuar:

    Kodi:
    Klasa e parazgjedhur
    Klasa e parazgjedhur
    Ndryshuar pėr herė tė fundit nga edspace : 12-04-2007 mė 23:58 Arsyeja: Korrigjim i shembullit
    Edi

  3. #3
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Sipas Google Code Search, kodi i pėrket PassThruAppBeta
    http://www.google.com/codesearch?hl=...=/ProtocolCF.h
    Edi

  4. #4
    mos e luaj; I DEBUAR! Maska e qoska
    Anėtarėsuar
    17-05-2004
    Vendndodhja
    tirane
    Postime
    837
    veshtiresia e vetme qe shoh une ketu eshte deklarimi i struktures, me sa shoh une(jo se jam aq ekspert ne C++ per "metadata transaltion dhe factory code") eshte vetem per te evituar "namespace collision" brenda klases(Per te mos ngaterruar kompilatorin ne dy tupe te njejte me emer te ndryshem).

    Me thoni ne e kam gabim.

  5. #5
    i/e regjistruar
    Anėtarėsuar
    17-11-2006
    Postime
    81
    Interpretimi i edspace eshte i sakte (madje edhe investigimi i source-code).

    Une nuk e njoh Javen, dhe nuk e di se sa e thjeshte eshte kjo gje ne te, gjithesesi per mendimin tim (subjektiv) nuk me duket nje zgjidhje e koklavitur.

    int v = 3;

    {
    float v = 7.5f;
    };

    Ne fragmentin mesiper, variabli v i tipit float (brenda kllapave gjarperueshe) e "fsheh" variablin e jashtem v (te tipit int). Ky fragment nuk eshte as i gabuar, as i "rrezikshem" per kompilatorin, e aq me pak i veshtire.

    Ajo qe ma beri mua te veshtire leximin e struktures, ishte fakti se ndersa rregullat lidhur me "name scope" gjate deklarimit te variablave i kisha ndeshur shpesh here, dhe i mbaja mend, me sa duket me kishte shpetuar fakti qe te njejtat rregulla vlejne edhe per typedef. Si lexova doc mbi typedef ne MSDN, gjithcka u be e thjeshte. Nese tipi T definon tipin _CreatorClass (permes typedef), ky ka per ta "fshehur" definimin e meparshem (te jashtem) typedef Default _CreatorClass - duke ofruar efektivisht "inteligjence permes deklarimeve" - dicka shume simpatike per mendimin tim.
    Mesazhi i edspace e shpjegon ne detaje procesin.

  6. #6
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Kodi mė poshtė nė Java bėn tė njėjtėn gjė si kodi mė lart nė C++.

    ProveMeReflektimet.java

    Kodi PHP:

    public class ProveMeReflektimet {

      class 
    KlasaMeKlasenSakte {
        class 
    KlasaSakte {};
      }
      
      class 
    KlasaPaKlasenSakte{}; 
      class 
    KlasaParazgjedhur{}

      
    // Kthen T::"nenKlasa" nese ekziston. Ne te kundert kthen parazgjedhur.
      
    public static Class zgjidhKlasen(String nenKlasa
                                       Class 
    T
                                       Class 
    parazgjedhur) {
        
        for (Class 
    klasaNenT T.getDeclaredClasses()) {
          if (
    nenKlasa.equals(klasaNenT.getSimpleName())) {
            return 
    klasaNenT
          }
        } 
        
        return 
    parazgjedhur;
      }
      
      public static 
    void main(String[] args) {
        
        
    // Kjo zgjedh KlasaMeKlasenSakte::KlasaSakte
        
    System.out.println(   
            
    zgjidhKlasen("KlasaSakte"
                         
    KlasaMeKlasenSakte.class, 
                         
    KlasaParazgjedhur.class).getSimpleName() );

        
    // Kjo zgjedh klasen e parazgjedhur
        
    System.out.println(   
            
    zgjidhKlasen("KlasaSakte"
                         
    KlasaPaKlasenSakte.class, 
                         
    KlasaParazgjedhur.class).getSimpleName() );
      }



    Rezultati:

    Kodi:
    KlasaSakte
    KlasaParazgjedhur
    Ndryshuar pėr herė tė fundit nga edspace : 29-04-2007 mė 21:13
    Edi

Tema tė Ngjashme

  1. Struktura e Tokes sipas Bibles.
    Nga K.TORO nė forumin Toleranca fetare
    Pėrgjigje: 164
    Postimi i Fundit: 13-07-2011, 07:21
  2. Fjalet elementare dhe struktura e tyre.
    Nga dias10 nė forumin Gjuha shqipe
    Pėrgjigje: 2
    Postimi i Fundit: 06-06-2009, 17:52
  3. Struktura etike e kanunit
    Nga Xhuxhumaku nė forumin Historia shqiptare
    Pėrgjigje: 3
    Postimi i Fundit: 03-09-2006, 13:00
  4. Qeveria ėshtė ndėrtuar nga struktura parapolitike e paraushtarake
    Nga ARIANI_TB nė forumin Tema e shtypit tė ditės
    Pėrgjigje: 1
    Postimi i Fundit: 31-12-2005, 12:50
  5. Bukoshi akuzon qeverinė pėr korrupsion dhe struktura mafioze
    Nga mani nė forumin Tema e shtypit tė ditės
    Pėrgjigje: 23
    Postimi i Fundit: 31-01-2005, 16:30

Regullat e Postimit

  • Ju nuk mund tė hapni tema tė reja.
  • Ju nuk mund tė postoni nė tema.
  • Ju nuk mund tė bashkėngjitni skedarė.
  • Ju nuk mund tė ndryshoni postimet tuaja.
  •