Bei einem früheren Arbeitgeber schrieben wir Binärnachrichten, die "über den Draht" an andere Computer geschickt werden mussten. Jede Nachricht hatte einen Standard-Header, etwa so:
class Header
{
int type;
int payloadLength;
};
Alle Daten waren zusammenhängend (Kopfzeile, unmittelbar gefolgt von den Daten). Wir wollten an die Nutzdaten gelangen, da wir einen Zeiger auf einen Header hatten. Traditionell könnte man etwas sagen wie:
char* Header::GetPayload()
{
return ((char*) &payloadLength) + sizeof(payloadLength);
}
oder sogar:
char* Header::GetPayload()
{
return ((char*) this) + sizeof(Header);
}
Das schien mir etwas zu langatmig, also habe ich mir etwas ausgedacht:
char* Header::GetPayload()
{
return (char*) &this[1];
}
Auf den ersten Blick wirkt es eher beunruhigend, vielleicht zu seltsam für den Gebrauch - aber sehr kompakt. Es gab eine Menge Debatten darüber, ob es brillant oder eine Abscheulichkeit ist.
Also, was ist es - Verbrechen gegen die Codierung oder eine gute Lösung? Hatten Sie jemals einen ähnlichen Kompromiss?
-Update:
Wir haben das Array mit der Größe Null ausprobiert, aber damals gaben die Compiler Warnungen aus. Wir sind schließlich zur inhärenten Technik übergegangen: Message leitet sich von Header ab. Das funktioniert in der Praxis gut, aber im Prinzip sagen Sie, dass eine Nachricht ein Header ist - was ein wenig umständlich ist.