Information-hiding struct
-
Guten Morgen Leute,
ich habe folgendes Konstrukt, ich möchte Foo für die Außenwelt versteckt halten. Was ich wie folgt mache:
foo.h
struct foo; //Forward decl. void do(struct foo* pFoo);
foo.c
struct foo { int x; }; void do(struct foo* pFoo) { pFoo->X =42; }
nun aber dachte ich mir ich mache foo als typedef
typedef struct foo { int x; } foo;
aber für die forward decl. geht das ja nicht , bzw. 2 mal das selbe typdef.. wie löse ich das?;)
Danke für euere Beiträge:)
-
Ich kenne das so, dass man dem Strukturnamen einen Präfix gibt, zB. tag:
struct tagFoo;
und
typedef struct tagFoo { } Foo;
Ist natürlich etwas doof, da du in der Header-Datei noch mit dem
tagFoo
arbeiten musst, ich weiß nicht, ob man da schon einen typedef auf den konkreten Typen machen darf/kann.
-
@DocShoe sagte in Information-hiding struct:
Ich kenne das so, dass man dem Strukturnamen einen Präfix gibt, zB. tag:
struct tagFoo;
und
typedef struct tagFoo { } Foo;
Ist natürlich etwas doof, da du in der Header-Datei noch mit dem
tagFoo
arbeiten musst, ich weiß nicht, ob man da schon einen typedef auf den konkreten Typen machen darf/kann.ok danke, ich probier das mal aus;) danke dir
-
Lustig, bin gerade zufällig per Reddit auf diesen Artikel gestoßen: The C Programming Language: Myths and Reality (1): C has no equivalent to “private”
-
@Th69 sagte in Information-hiding struct:
Lustig, bin gerade zufällig per Reddit auf diesen Artikel gestoßen: The C Programming Language: Myths and Reality (1): C has no equivalent to “private”
Super, das is interessant, danke Für alle die den Artikel nicht gelesen haben hier ein ausschnitt:
So, in the header you do:
typedef struct StringBuilder StringBuilder; void Append(StringBuilder *obj, const char *snippet);
In the implementation you do:
struct StringBuilder { char *payload; }; void Append(StringBuilder *obj, const char *snippet) { ... }
And … that’s it!