how to do this meta-programming? print the address of random element's address of a variable length of arrays?

mw mingwu at
Sun Sep 13 07:00:36 UTC 2020

On Sunday, 13 September 2020 at 01:25:43 UTC, mw wrote:
> On Saturday, 12 September 2020 at 20:29:40 UTC, Paul Backus
>> If you have a "real-life" application in mind for this, I'd be 
>> curious to hear what it is.
> I'm wrapping a C library, trying to write a single D function / 
> template that can work with a group of C functions, hence I 
> need that kind of signature I described.
> I'll post the code when I'm ready.

Here it is: D wrapper for

I end up using C macro to generate D functions, the single 
template is this one:
expected_lookback) __NL__\

and the macro instantiations are on line 144, 158, 168:

DECL_TA_FUNC(TA_MA, MA_INS, MA_OUTS, (MA_optInTimePeriod-1))

the generated D functions are here:

you can take a look of the 3 generated functions to see the 
similarities, and pay attention to:

-- func decl: TA_xxx( <out array params>, <in options> )
-- assertions on <out arrays>
-- func calls: TA_xxx_Lookback(<in options>)
-- func call: talib.TA_xxx(<in options>, <transformed out 
arrays>, <also note: &begin, &num>)

There are a number of C macro tricks was used, which I just did 
some googling to be able to get it done in C -- and with the 
added benefits that I can directly see the generated source file 
to debug in the development process.

I think it's a non-trivial task to get this compile-time 
meta-programming done in D, if it can be done at all (I'm not 

Anyone want to give it a try? and submit a PR :-)

More information about the Digitalmars-d-learn mailing list