 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Andreas Volz Guest
|
Posted: Tue Oct 25, 2005 11:46 am Post subject: Sichtbarkeit typedef |
|
|
Hi,
gerade bei geschachtelten Templates (z.B. vector in map) und langen
Klassennamen wird es mit der Zeit recht unübersichtlich. Um das etwas zu
erleichtern kann man ja typedef nutzen um das etwas zu vereinfachen.
Jetzt ist nur die Frage an welcher Stelle ich das typedef platziere.
Bisher hab ich es immer in den Header über die Klasse eingefügt. Manche
typedefs sind allerdings nur zur Verwendung für die Klasse selbst
gedacht. Ich hab mittlerweile rausgefunden, dass diese Stellen vom
Compiler akzeptiert werden:
typedef int myint1;
class foo
{
typedef int myint2;
private:
typedef int myint3;
public:
typedef int myint4;
}
Ich verstehe die Sichtbarkeit dieser verschiedenen typedef nicht ganz.
Kann das mal jemand kurz erklären? Oder gibt es nur eine globale
Sichtbarkeit für typedef und es spielt keine Rolle wo ich es einfüge?
Gruß
Andreas
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Jörg Barfurth Guest
|
Posted: Tue Oct 25, 2005 3:59 pm Post subject: Re: Sichtbarkeit typedef |
|
|
Andreas Volz schrieb:
| Quote: | gerade bei geschachtelten Templates (z.B. vector in map) und langen
Klassennamen wird es mit der Zeit recht unübersichtlich. Um das etwaszu
erleichtern kann man ja typedef nutzen um das etwas zu vereinfachen.
Jetzt ist nur die Frage an welcher Stelle ich das typedef platziere.
Bisher hab ich es immer in den Header über die Klasse eingefügt. Manche
typedefs sind allerdings nur zur Verwendung für die Klasse selbst
gedacht. Ich hab mittlerweile rausgefunden, dass diese Stellen vom
Compiler akzeptiert werden:
|
typedef-Deklarationen deklarieren auch (nur) einen Namen. Sie dürfen
fast überall dahin, wo du auch einen Objektnamen deklarieren darfst.
Auch die Regel für die Sichtbarkeit und Zugreifbarkeit sind dieselben
wie für andere Namen.
| Quote: | typedef int myint1;
|
Im globalen Scope, und im Rest dieser Übersetzungseinheit dort sicht-
und zugreifbar.
| Quote: | class foo
{
typedef int myint2;
private:
|
Das braucht es hier nicht wirklich. Bei 'class' ist der Defaultzugriff
'private' (bei 'struct' wäre es 'public'. Also haben myint2 und myint3
denselben Status.
| Quote: | typedef int myint3;
|
Sichtbar in der Klassenscope von class foo; zugreifbar für Member und
friends von class foo.
| Quote: | public:
typedef int myint4;
|
Sichtbar in der Klassenscope von class foo; öffentlich zugreifbar.
| Quote: | }
Ich verstehe die Sichtbarkeit dieser verschiedenen typedef nicht ganz.
Kann das mal jemand kurz erklären? Oder gibt es nur eine globale
Sichtbarkeit für typedef und es spielt keine Rolle wo ich es einfüge?
|
void bar()
{
myint1 a; // OK
::myint1 b; // auch OK
myint2 c; // Fehler. 'myint2' nicht bekannt
foo::myint2 d; // Fehler. 'myint2' ist private in class foo
foo::myint3 e; // Fehler. 'myint3' ist private in class foo
foo::myint4 f; // OK
}
Die Deklarationen von d und e wären OK, wenn bar() ein friend von class
foo wäre.
Die Deklarationen von c, d und e wären OK, wenn bar() ein Member von
class foo wäre.
HTH, Jörg
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Andreas Volz Guest
|
Posted: Tue Oct 25, 2005 4:22 pm Post subject: Re: Sichtbarkeit typedef |
|
|
Am Tue, 25 Oct 2005 17:59:42 +0200 schrieb Jörg Barfurth:
| Quote: | Andreas Volz schrieb:
gerade bei geschachtelten Templates (z.B. vector in map) und langen
Klassennamen wird es mit der Zeit recht unübersichtlich. Um das
etwas zu erleichtern kann man ja typedef nutzen um das etwas zu
vereinfachen. Jetzt ist nur die Frage an welcher Stelle ich das
typedef platziere. Bisher hab ich es immer in den Header über die
Klasse eingefügt. Manche typedefs sind allerdings nur zur
Verwendung für die Klasse selbst gedacht. Ich hab mittlerweile
rausgefunden, dass diese Stellen vom Compiler akzeptiert werden:
typedef-Deklarationen deklarieren auch (nur) einen Namen. Sie dürfen
fast überall dahin, wo du auch einen Objektnamen deklarieren darfst.
Auch die Regel für die Sichtbarkeit und Zugreifbarkeit sind dieselben
wie für andere Namen.
[...]
|
Ok, danke für die ausführliche Erklärung. Ich hab mich nämlich
gewundert, weil meine IDE beim Verschieben in den class-Bereich das
Syntax-Highlighting dieses neuen Datentyps abgeschaltet hat. Darum
dachte ich das wäre vielleicht nur eine g++ Erweiterung. Da liegt wohl
ein Problem beim Syntax-Highlighting vor.
Gruß
Andreas
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|