Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]deriva puntatore in mappa

    ciao .
    Ho messo in ordine le idee.
    ho la seguente funzione:
    [code]
    HRESULT STDMETHODCALLTYPE SAXStore::endElement(
    wchar_t __RPC_FAR *pwchNamespaceUri,
    int cchNamespaceUri,
    wchar_t __RPC_FAR *pwchLocalName,
    int cchLocalName,
    wchar_t __RPC_FAR *pwchRawName,
    int cchRawName)
    {
    std::wstring localName(pwchLocalName);
    CBaseIfc** pEntityc = m_mapRegistredRef[L"i45"];

    CBaseIfc** pOldIfc = NULL;

    if(StackIfc.size()>0)
    pOldIfc = &StackIfc.top();

    //se il precedente elemento nella coda è un id e il corrente un ref
    //li leggotutti e due in modo da riferire il ref ,figlio del padre

    if(StackIfc.size()>1)
    {
    StackIfc.pop();
    }//carica i dati fino al tag di chiusura, se sono ne tag di chiusura getdata ritorna false
    if(StackIfc.size()!= 0){

    if(! StackIfc.top()->GetData(localName, m_strCurrStr, m_nPos, pOldIfc))
    {
    wstring id = StackIfc.top()->getID();
    wstring ref = StackIfc.top()->getRef();
    //è una classe con id appena terminata(sono nell endtag),notifico
    if(id.compare(L"unknown") != 0 && id.compare(L"") != 0)
    {
    CBaseIfc** pEntity = m_mapRegistredRef[id];
    if(pEntity)
    {
    CWallStandardCaseIfc * w = (CWallStandardCaseIfc*) *pOldIfc;
    *pEntity = w;

    CWallStandardCaseIfc * f = m_GraphicsElements->getWalls(0);
    int i = 0;
    }
    }
    else
    {
    /**/
    }
    if(StackIfc.size()>0)
    StackIfc.pop();
    }
    else
    {
    if(pOldIfc)
    {
    wstring id = (*pOldIfc)->getID();
    wstring ref = (*pOldIfc)->getRef();
    if(ref.compare(L"unknown") != 0 && ref.compare(L"") != 0)
    if(ref.compare(L"i45")== 0){
    m_mapRegistredRef[ref] = pOldIfc;//qui setto il valore //v.commenti dopo

    }
    }
    }

    }
    m_strCurrStr = L"";
    return S_OK;
    }
    [code]

    allora

    m_mapRegistredRef è un map<wstring, CBaseIfc**>m_mapRegistredRef;
    pOldIfc è un CBaseIfc** con il primo indirizzo xxxxx e il secondo(quello a cui punta il primo):yyyyy
    metto questo pOldIfc nella mappa con key ="i45".
    quando estraggo il puntatore a puntatore dalla mappa con m_mapRegistredRef["i45"] il primo puntatore : xxxxx è corretto , mentre il secondo è diverso (anche se molto poco , non so se serve questo commento) yyyyy è infatti leggermente diverso.

    yyyyy è l'indirizzo a una variabile membro publica della classe cwall.
    in pratica lo vorrei usare tipo un puntatore a funzione , andando a memorizzare l'indirizzo della variabile membro pubblica in una mappa per poi tirarlo fuori e cambiare il valore della variabile membro a un altro puntatore.

    come mai questo puntatore cambia?
    è due gg che ci sono su.
    CIao .

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    per spiegami meglio(perchè capisco che detta cosi ' è un po incasinato).
    IO voglio mantenere una mappa con i puntatori alle proprietà(variabili membro pubblic nel mio caso) in modo che prelevandole da questa mappa con un id e ugualindole ad un indirizzo diverso l'indirizzo della variabile membro della classe relativa cambia anc' esso.
    Ma non ci riesco!!!


    in pratica si potrebbe fare in modo piu pulito con dei puntatori a funzioni setxxx che vanno a settare la variabile membro dell'oggetto.
    Mi sebra di ricordare pero' che serve l'oggetto che ha come funzione membro il setxxx ma questo non è un problema.
    come si puo fare?

    Grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.