![]() |
C Funktionen "überladen"
Hallöchen!
Ich hab bei mir eine Funktion in meinem C-Programm, die ich im Prinzip "überladen" will. Ich weiß, das geht in C nicht, aber vielleicht hat ja trotzdem jemand ne Idee, wie man das zumindest "simulieren" (ich weiß, das hört sich bescheuert an...;-))kann. Also: ich habe eine Funktion, der ich ein mal die eine Struktur übergeben will und das andere Mal eine andere Struktur übergeben will. Im Prinzip macht sie bei beiden Strukturen das gleiche, aber sie muss halt die verschiedenen Strukturen erst einmal für sich "umformulieren". Ich will eigentlich keinesfalls 2 Funktionen mit verschiedenen Namen nutzen :zwinker: Hat jemand dazu eine Idee? Gruß, Elko |
Re: C Funktionen "überladen"
Okay...
Definiere deine Structs so, dass am Anfang die Größe (oder ein anderes, eindeutiges Merkmal) steht. Jetzt kannst du deiner Funktion einen Pointer übergeben, und die kann diesen auf int (oder eben der Typ des Felds) casten, und anhand dieser heruafinden, welcher der beiden Struct-Typen es ist ;) (IIRC machen das auch manche Win-API Funktionen so, dass man im übergebenen Struct als erstes Element die Größe drinhat ... :gruebel: ) |
Re: C Funktionen "überladen"
.. oder so wie es
![]() Ist kein wirklicher Overload aber schau selbst mal. Oder gleich C++ verwenden. Grüße Klaus |
Re: C Funktionen "überladen"
Vielen Dank für eure Tipps!
Ich habs jetzt folgendermaßen umgesetzt: Die beiden Strukturen beinhalten als erste Variable ein Byte, das die Größe der Struktur beinhaltet. Dann wird bei einem Aufruf der Funktion die Strukturadresse übergeben und die Funktion nimmt die Adresse als void-Zeiger auf. Dann wandelt sie den void->Zeider in einen Char-Zeiger um, liest das Byte (was ja die Länge der Struktur beinhaltet) und weiß dann Bescheid, welchen Typ ich übergebe :thumb: :feuerchen: Gruß, Elko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz