Eine breite Palette von Strukturen wird in Win32-Programmierung verwendet. Viele Male werden nur einige ihrer Felder verwendet und alle anderen Felder werden auf Null gesetzt. Zum Beispiel:Zeroing einer Struktur im Konstruktor
STARTUPINFO startupInfo; // has more than 10 member variables
ZeroMemory(&startupInfo, sizeof(startupInfo)); //zero out
startupInfo.cb = sizeof(startupInfo); //setting size is required according to MSDN
startupInfo.dwFlags = STARTF_FORCEOFFFEEDBACK;
//Now call CreateProcess() passing the startupInfo into it
Ich möchte Kopie-Einfügen von solchen Code zu stoppen und stattdessen eine Abstraktion verwenden, die über Nullsetzen und Einstellen der Parameter sorgen würden. Nehmen wir an, ich brauche nur die Struktur initialisiert wie in Beispiel, und keine andere Abstimmung wird jemals benötigt. Ist das Folgende eine gute Lösung? Was sind mögliche Probleme?
class CStartupInfo : public STARTUPINFO {
public:
CStartupInfo()
{
ZeroMemory(this, sizeof(STARTUPINFO));
cb = sizeof(STARTUPINFO);
dwFlags = STARTF_FORCEOFFFEEDBACK;
}
};
Ich bin insbesondere besorgt über die Zeromemory() -Aufruf - sieht aus wie ich voll und ganz den Code steuern und die Klasse hat keine Vtable und ruft Zeromemory() auf diese Weise sicher ist, und es gibt keinen großen Unterschied zwischen den beiden Code-Snippets, außer dass letzterer eine Abstraktion bereitstellt. Gibt es irgendwelche Vorbehalte?
Ich mag mich irren, aber diese Klassen scheinen Teil von MFC zu sein? Wenn das so ist, dann ist das ein großer Rahmen, der für diese einfache Bequemlichkeit verwendet werden kann. (Das und ich bin ein ATL/WTL Mann selbst.) – Daemin
Die Strukturen DiLascia Wraps sind Teil des Windows SDK, wenn ich mich nicht irre, aber die Technik kann auf jeder POD-Struktur verwendet werden - es ist nicht an MFC, ATL gebunden oder Windows. Im DiLascia-Artikel geht es um die Arbeit mit einem MFC-Widget - es geht nicht darum, die Strukturen in einer Klasse zu verpacken, die sie enthält. Das Wrappen der Strukturen ist nur eine Technik, die er benutzt und in dem Artikel erwähnt. –