MFC Collection Utilities-Bibliothek

 C Programming >> C-Programmierung >  >> Tags >> MFC
MFC Collection Utilities-Bibliothek
Dieses Projekt wurde auf GitHub verschoben.

Neuer Standort:https://github.com/mariusbancila/mfccollectionutilities

C++11 bietet Unterstützung für bereichsbasierte for-Schleifen. Sie ermöglichen das Iterieren über die Elemente eines Bereichs, ohne einen Index zu verwenden.

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

Wenn Sie jedoch den folgenden MFC-Code ausprobieren, erhalten Sie einige Fehler, weil der Compiler nach einem begin() sucht und end() Funktion, die Zugriff auf das erste und letzte Element des Bereichs bietet:

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

MFC definiert solche Funktionen nicht für seine Container.

Geben Sie MFC-Erfassungsdienstprogramme ein

Tom Kirby-Green und ich haben eine kleine Open-Source-Bibliothek entwickelt, die die Verwendung aller MFC-Erfassungstypen in bereichsbasierten for-Schleifen ermöglicht. Die Bibliothek heißt MFC Collection Utilities und ist auf Codeplex verfügbar.

Die Bibliothek besteht aus einem einzelnen Header namens mfcitators.h , die Sie in Ihre MFC-Projekte einschließen.

#include "mfciterators.h"

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

Compiler- und Sammlungsunterstützung

Die Bibliothek funktioniert in Visual Studio 2012 (der ersten Version des C++-Compilers, die bereichsbasierte for-Schleifen unterstützt) oder einer neueren Version.

Die Bibliothek ermöglicht die Verwendung aller MFC-Sammlungen, sowohl Vorlagen als auch Nicht-Vorlagen, in bereichsbasierten for-Schleifen. Das bedeutet Arrays, Listen und Maps. Bei Karten erhalten Sie Zugriff auf den Inhalt über ein Schlüssel-Wert-Paar mit zwei Feldern:Schlüssel und Wert .

Unterstützte Vorlagensammlungen

Arrays Listen Karten
CArray CList CMap
CTypedPtrArray CTypedPtrList CTypedPtrMap

Unterstützte Nicht-Vorlagen-Sammlungen

Arrays Listen Karten
CObArray CObListe CMapPtrToWord
CByteArray CPtrList CMapPtrToPtr
CDWordArray CStringListe CMapStringToOb
CPtrArray CMapStringToPtr
CStringArray CMapStringToString
CWordArray CMapWordToOb
CUIntArray CMapWordToPtr

Beispiele

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);
}

Herunterladen

Version 1.0 kann hier von Codeplex heruntergeladen werden.

Für eine einfachere Installation können Sie das verfügbare Nuget-Paket verwenden.

Teilen Sie uns mit, wenn Sie auf Probleme stoßen.