Ich habe zwei Funktionen, die sich nur in einem Parameter (unterschiedliche Struktur) unterscheiden, die fast die gleiche Verarbeitung ausführen, was zu viel Codeverdopplung führt. Sehen Sie im folgenden vereinfachten Beispiel:Reduzieren Sie Code-Duplizierung
struct foo {
int a;
};
struct bar {
int a;
int b;
};
foo(struct foo *f) {
do_b();
// error handling
f->a = 1;
do_c();
// error handling
do_d();
// error handling
}
bar(struct bar *b); {
do_a();
// error handling
b->b = 2;
do_b();
// error handling
b->a = 1;
do_c();
// error handling
do_d();
// error handling
}
Gibt es eine intelligente Art und Weise nur eine Funktion bei der Verwendung der Code-Duplizierung zu beseitigen?
Sind Sie bereit, ein 'struct B' auf' struct B {struct A zu ändern; int b; }; '? –
Die wirklich cleveren Möglichkeiten, dies zu tun, erfordern, dass Sie die [strenge Aliasing-Regel] (https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule) vollständig verstehen. Leider versteht niemand diese Regel ([Beispiel] (https://stackoverflow.com/questions/39035426/is-aliasing-of-pointers-between-aggregate-c-structs-and-their-members-standards), [ Beispiel] (https://stackoverflow.com/questions/39036857/opaque-structures-with-multiple-definitions), [Beispiel] (https://stackoverflow.com/questions/38968296/a-type-for-arbitrary- Speicher-in-c/38969259 # 38969259)). Du bist also festgefahren. – user3386109