PDA

Visualizza la versione completa : [C++] Deriva puntatore in mappa


giuseppe500
03-12-2009, 13:21
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 .

giuseppe500
03-12-2009, 14:09
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!!!
:dh:

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.

Loading