Thread overview
Convert this C define to D
May 22, 2007
Regan Heath
May 22, 2007
Daniel Keep
May 22, 2007
Regan Heath
May 22, 2007
Frits van Bommel
May 22, 2007
Hi all,

I have this C macro:

#define STACK_OF(type) STACK

usage:

struct foo {
  STACK_OF(Bob) bobStack;
}

lets ignore the fact that the replacement STACK doesn't include with the type it was given, in this case/stage it's not important.

I feel like I should be able to replace this C macro with a template/mixin of some kind but as templates/mixins aren't my strongest d-foo (kungfoo) technique I figured I had best ask for opinions.

Regan
May 22, 2007

Regan Heath wrote:
> Hi all,
> 
> I have this C macro:
> 
> #define STACK_OF(type) STACK
> 
> usage:
> 
> struct foo {
>   STACK_OF(Bob) bobStack;
> }
> 
> lets ignore the fact that the replacement STACK doesn't include with the type it was given, in this case/stage it's not important.
> 
> I feel like I should be able to replace this C macro with a template/mixin of some kind but as templates/mixins aren't my strongest d-foo (kungfoo) technique I figured I had best ask for opinions.
> 
> Regan

Assuming that STACK is an actual type...

template STACK_OF(type)
{
    alias STACK STACK_OF;
}

	-- Daniel

-- 
int getRandomNumber()
{
    return 4; // chosen by fair dice roll.
              // guaranteed to be random.
}

http://xkcd.com/

v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP  http://hackerkey.com/
May 22, 2007
Daniel Keep Wrote:
> Regan Heath wrote:
> > Hi all,
> > 
> > I have this C macro:
> > 
> > #define STACK_OF(type) STACK
> > 
> > usage:
> > 
> > struct foo {
> >   STACK_OF(Bob) bobStack;
> > }
> > 
> > lets ignore the fact that the replacement STACK doesn't include with the type it was given, in this case/stage it's not important.
> > 
> > I feel like I should be able to replace this C macro with a template/mixin of some kind but as templates/mixins aren't my strongest d-foo (kungfoo) technique I figured I had best ask for opinions.
> > 
> > Regan
> 
> Assuming that STACK is an actual type...
> 
> template STACK_OF(type)
> {
>     alias STACK STACK_OF;
> }

So, using the above this:

struct foo {
  STACK_OF(Bob) bobStack;
}

results in/becomes/is equivalent to this:

struct foo {
  STACK  bobStack;
}

?

Yes, STACK is a type, a structure which has previously been defined.

Regan
May 22, 2007
Regan Heath wrote:
> Daniel Keep Wrote:
[snip]
>> Assuming that STACK is an actual type...
>>
>> template STACK_OF(type)
>> {
>>     alias STACK STACK_OF;
>> }
> 
> So, using the above this:
> 
> struct foo {
>   STACK_OF(Bob) bobStack;
> }
> 
> results in/becomes/is equivalent to this:
> 
> struct foo {
>   STACK  bobStack;
> }
> 
> ?
> 
> Yes, STACK is a type, a structure which has previously been defined.

Almost. You'd have to do this:
---
struct foo {
    STACK_OF!(Bob) bobStack;
}
---
Note the '!'.