PDA

Visualizza la versione completa : [C++] Template con MFC


giuseppe500
04-11-2008, 16:33
Ciao.
Devo gestire la seguente funzione:



void CBaseApiSapData::iterateSafeArray(CArray<CString,CString>* pArray,SAFEARRAY* sa,int nType)
{

CString pdata ;//variabile che cambia
{
for(idx=0; idx < lElements ; idx++)
{
SafeArrayGetElement(sa,&idx,&pdata);
CString str(pdata);
if(!containsElement(pArray,str) && str != "")
pArray->Add(str);
}
}
}


che cambia a secondo il tipo che usa(se ho un CString allora la var pdata sara' CString e l'array pArray dovrebbe essere di tipo <CString,CString>)
1)puo' essere un caso in cui usare i template?
2)Come si puo' generalizzare la funzione magari con i templates(senza gestire l'array pArray ,lasciandolo a <CString,CString>) ?
3)come gestireste la situazione di un array che dovrebbe essere di tipo generico?
grazie.

giuseppe500
05-11-2008, 10:27
up

MItaly
05-11-2008, 16:29
1) Sì, questa è una situazione in cui si potrebbero utilizzare, anche se non renderebbero il codice molto più robusto, visto che SafeArrayGetElement non effettua alcun controllo di tipo.
2)


template<class ElemType> void CBaseApiSapData::iterateSafeArray(CArray<CString,CString>* pArray,SAFEARRAY* sa,int nType)
{
ElemType pdata;
//...
}

3) Generico nel senso di specializzabile a volontà (come i container STL, per intenderci) o generico nel senso di "un'istanza può contenere qualunque tipo" (come gli array di Variant)?

Loading