Libreria MFC Collection Utilities

 C Programming >> Programmazione C >  >> Tags >> MFC
Libreria MFC Collection Utilities
Questo progetto è stato spostato su GitHub.

Nuova posizione:https://github.com/mariusbancila/mfccollectionutilities

C++11 ha fornito il supporto per i cicli for basati su intervallo. Consentono di scorrere gli elementi di un intervallo senza utilizzare un indice.

std::vector<int> v = {1, 2, 3, 4, 5};
for(auto& e : v)
  e *= 2;

Tuttavia, se provi il seguente codice MFC, ottieni alcuni errori perché il compilatore sta cercando un begin() e end() funzione che fornisce l'accesso al primo e all'ultimo elemento dell'intervallo:

void func(CStringArray const & arr)
{
   for(auto const & str : arr)
   {
      // do something with str
   }
}

MFC non definisce tali funzioni per i suoi contenitori.

Entra in Utilità di raccolta MFC

Tom Kirby-Green e io abbiamo sviluppato una piccola libreria open source che consente l'uso di tutti i tipi di raccolta MFC in cicli for basati sull'intervallo. La libreria si chiama MFC Collection Utilities ed è disponibile su codeplex.

La libreria è costituita da un'unica intestazione, denominata mfciterators.h , che includi nei tuoi progetti MFC.

#include "mfciterators.h"

void func(CStringArray const & arr)
{
   for(auto const & str : arr)
   {
      // do something with str
   }
}

Supporto per compilatori e raccolte

La libreria funziona in Visual Studio 2012 (la prima versione del compilatore C++ che supporta i cicli for basati su intervalli) o una versione più recente.

La libreria consente di utilizzare tutte le raccolte MFC, sia modello che non modello, in cicli for basati su intervalli. Ciò significa array, elenchi e mappe. Per le mappe puoi accedere al contenuto tramite una coppia chiave-valore che ha due campi:chiave e valore .

Raccolte di modelli supportate

Array Elenchi Mappe
Carray Elenco CL Mappa
CTypedPtrArray CTypedPtrList CTypedPtrMap

Raccolte non modello supportate

Array Elenchi Mappe
CObArray Lista COb CMapPtrToWord
CByteArray Lista CPtr CMapPtrToPtr
CDWordArray CStringList CMapStringToOb
CPtrArray CMapStringToPtr
CStringArray CMapStringToString
CWordArray CMapWordToOb
CUIntArray CMapWordToPtr

Esempi

CStringArray arr;
arr.Add("this");
arr.Add("is");
arr.Add("a");
arr.Add("sample");

for(auto & s : arr)
{
   s.MakeUpper();
}
class CFoo
{
public:
   int value;

   CFoo(int const v): value(v) {}
};

CTypedPtrList<CPtrList, CBar*> ptrlist;
ptrlist.AddTail(new CFoo(1));
ptrlist.AddTail(new CFoo(2));
ptrlist.AddTail(new CFoo(3));

for(auto & o : ptrlist)
   o->value *= 2;
CMap<int, int, CString, CString> map;

map.SetAt(1, "one");
map.SetAt(2, "two");
map.SetAt(3, "three");

for(auto & kvp : map)
{
   kvp.value.MakeUpper();
}

for(auto const & kvp : map)
{
   CString temp;
   temp.Format("key=%d, value=%s", kvp.key, kvp.value);
}

Scarica

La versione 1.0 può essere scaricata da codeplex da qui.

Per un'installazione più semplice puoi utilizzare il pacchetto nuget disponibile.

Facci sapere se riscontri problemi.