🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
5 messages
5 total messages Started by Bernhard Ruch Wed, 17 Apr 1996 10:44
typedef in einem Makro
#2155
Author: Bernhard Ruch
Date: Wed, 17 Apr 1996 10:44
32 lines
1363 bytes
Ist es moeglich, folgendes Problem mit Makros zu loesen?

Ich moechte, fur eine beliebige Klasse, einen neuen Datentyp
definieren (einen Pointer auf die Klasse), und eine Funktion,
die diesen Pointer als Argument hat.
Der Name des Datentyps sollte aus dem Namen der Klasse + "Pointer"
bestehen.

z.B. fuer die Klasse "Object":

    typedef Object* ObjectPointer;

    int Display (ObjectPointer pObject);


Ich versuchte es mit folgendem Makro:


    #define CLASSPOINTER(CLASSNAME) typedef CLASSNAME* CLASSNAMEPointer; \
    int Display (CLASSNAMEPointer pCLASSNAME);

    CLASSPOINTER(Object)


Das Problem ist nun, dass "CLASSNAME" in "CLASSNAMEPointer" nicht durch
"Object" ersetzt wird

Gibt es irgendeine Methode, einen Teil eines Typ-Namens (oder Variablen-Namens)
in einem Makro durch ein Argument zu ersetzen? (z.B. $(CLASSNAME) wie im Makefile)


Bernhard
RE: typedef in einem Makro
#2156
Author: Klaus Ludwig
Date: Wed, 17 Apr 1996 12:05
19 lines
875 bytes
On Mittwoch, 17. April 1996, Bernhard Ruch wrote...
>     #define CLASSPOINTER(CLASSNAME) typedef CLASSNAME* CLASSNAMEPointer;
\
>     int Display (CLASSNAMEPointer pCLASSNAME);
> 
>     CLASSPOINTER(Object)
> 
> Das Problem ist nun, dass "CLASSNAME" in "CLASSNAMEPointer" nicht durch
> "Object" ersetzt wird

Versuchs doch mal mit zwei Gartenzäune: ##.

Beispiel:
#define M(Argument) int x##Argument
void main (void)
{
	M(Hallo);
	xHallo = 0;
}
Re: typedef in einem Makro
#2161
Author: Frank Nobis
Date: Wed, 17 Apr 1996 13:26
29 lines
1158 bytes
Bernhard Ruch <Bernhard.Ruch@studi.epfl.ch> writes:

> 
> Ist es moeglich, folgendes Problem mit Makros zu loesen?
>
Ja, ist es.
 
> Ich versuchte es mit folgendem Makro:
> 
> 
>     #define CLASSPOINTER(CLASSNAME) typedef CLASSNAME* CLASSNAMEPointer; \
>     int Display (CLASSNAMEPointer pCLASSNAME);
> 
>     CLASSPOINTER(Object)
> 
> 
> Das Problem ist nun, dass "CLASSNAME" in "CLASSNAMEPointer" nicht durch
> "Object" ersetzt wird

Ersetze  CLASSNAMEPointer durch CLASSNAME##Pointer

Andernfalls wird keine Ersetzung stattfinden.

Grusß
	Frank
-- 
 Frank Nobis				Email: fn@Radio-do.de  PGP AVAILABLE
 Landgrafenstr. 130			dg3dcn   http://www.radio-do.de/~fn/
 44139 Dortmund	    Powered by FreeBSD  Fax: +49 231 7213816
Re: typedef in einem Makro
#2164
Author: Goetz Winterfeldt
Date: Wed, 17 Apr 1996 15:54
31 lines
1392 bytes
(...)

       #define CLASSPOINTER(CLASSNAME) typedef CLASSNAME* CLASSNAMEPointer; \
       int Display (CLASSNAMEPointer pCLASSNAME);

       CLASSPOINTER(Object)

(...)
 
Eine andere Moeglichkeit als die schon genannten waere die name()
Functionen zu benutzten:

#include <generic.h>

#define CLASSPOINTER(CLASSNAME) name2(CLASSNAME,Pointer);

CLASSPOINTER(Object)

Goetz
--
---------------------------------------------------------------------
Goetz Winterfeldt
 
Centre Hospitalier                     Where ever you are .... 
Universitaire de Nancy                                  
(CHU)                                      ^^      ***       
54511 Vandoeuvre Cedex                         ^^      
                                       ____________________       
Tele: ++33 83154540
Email: g.winterfeldt@chu-nancy.fr 
Re: typedef in einem Makro
#2189
Author: Walter Doerwald
Date: Thu, 18 Apr 1996 23:27
40 lines
1789 bytes
Bernhard Ruch schrieb in <3174CB7F.41C6@studi.epfl.ch> folgendes:

> Ist es moeglich, folgendes Problem mit Makros zu loesen?
> 
> Ich moechte, fur eine beliebige Klasse, einen neuen Datentyp
> definieren (einen Pointer auf die Klasse), und eine Funktion,
> die diesen Pointer als Argument hat.
> Der Name des Datentyps sollte aus dem Namen der Klasse + "Pointer"
> bestehen.
> 
> z.B. fuer die Klasse "Object":
> 
>     typedef Object* ObjectPointer;
> 
>     int Display (ObjectPointer pObject);
> 
> 
> Ich versuchte es mit folgendem Makro:
> 
> 
>     #define CLASSPOINTER(CLASSNAME) typedef CLASSNAME* CLASSNAMEPointer; \
>     int Display (CLASSNAMEPointer pCLASSNAME);
> 
>     CLASSPOINTER(Object)
> 
> 
> Das Problem ist nun, dass "CLASSNAME" in "CLASSNAMEPointer" nicht durch
> "Object" ersetzt wird
> 
> Gibt es irgendeine Methode, einen Teil eines Typ-Namens (oder Variablen-Namens)
> in einem Makro durch ein Argument zu ersetzen? (z.B. $(CLASSNAME) wie im Makefile)

Theoretisch mit CLASSNAME##Pointer

Aber man sollte immer so weit wie möglich vermeiden mit Makros zu arbeiten.
(Insbesondere natürlich mit diesen Token-Pasting-Macros) Und in diesem Fall
sehe ich auch eigetnlich keinen besondere Grund mit sowas zu arbeiten.

Bis demnächst...
	Walter Dörwald
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads