C-Programmierer, der hier versucht, Python zu umgehen. Ich finde mich wiederholt brechen die DNY-Regel, und ich möchte wissen, ob es eine Möglichkeit gibt, einen unbekannten Typ in eine Funktion zu übergeben und darauf zu reagieren und seinen Typ dynamisch ändern. Derzeit habe ich:Verwenden mehrerer Casting-Typen in einer einzigen Funktion (c Überladungs-Workarounds)
static void ArrayFunction(void *one, void *two, uint8_t size)
{
// Get the array lengths.
if (size == sizeof(uint8_t))
{
uint8_t *One = one;
uint8_t *Two = two;
}
if (size == sizeof(uint16_t))
{
uint16_t *One = one;
uint16_t *Two = two;
}
if (size == sizeof(uint32_t))
{
uint32_t *One = one;
uint32_t *Two = two;
}
for (i = 0; i < MAX_BUSES; i++)
{
// Do something with the arrays.
One[i] = Two[i];
// Lots more code here. Maybe hundreds of lines.
}
}
Wie Sie wissen, kompiliert dieser Code nicht, da die beiden definierten Variablen sofort aus dem Anwendungsbereich fallen. Ich möchte ein Array von 8, 16, 32 usw. Länge übergeben und etwas damit tun, egal was. Ich weiß, dass ich den void-Zeiger nicht einfach verwenden kann, weil die Array-Länge unterschiedlich ist, wenn verschiedene Integer-Typen verwendet werden. Wenn ich die for-Schleife in jede der if-Anweisungen kopiere, habe ich drei Kopien des exakt gleichen Codes. Ist das in C zu kompliziert, oder gibt es einen Workaround, der die Anzahl der Male reduziert, die ich kopieren und einfügen muss? Vielen Dank!
Könnten Sie bitte die Essenz dessen formulieren, was Sie in einer Frage wissen möchten? –
Sorry, habe es nur mit einem allgemeineren Beispiel überarbeitet. Es ist schon eine Weile her, dass ich hier eine Frage von mir selbst stellen musste. – MPStoering