Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++] Template con MFC

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++ MFC]template

    Ciao.
    Devo gestire la seguente funzione:

    codice:
    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.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    up

  3. #3
    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)
    codice:
    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)?
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.