reflection based on my experience so far on compile-time meta-programming in D as a novice user: the problems
Steven Schveighoffer
schveiguy at gmail.com
Mon Sep 14 18:20:02 UTC 2020
On 9/14/20 1:40 PM, mw wrote:
> -- because of the points (1~3), the resulting D meta-programming version
> is often convoluted, and the code may have very bigger distance from the
> most straight-forward targeted function signature one have in mind from
> the beginning. And this makes writing & (and more importantly) reading
> (by a non-code-author) such code difficult.
>
>
You're looking at C macros, which D specifically does not do, mostly
because of the crap that can come out of them (note you can use dpp if
you really want them).
Your C macro I think translates pretty easily to a D mixin, because it's
generating a complete function:
string DECL_TA_FUNC(string TA_FUNC, string[] FUNC_INS, string[] FUNC_OUTS)
{
// this would be easier with string interpolation!
return format(q{
bool %s(double[] inData, %-(double[] %s,%), %-(%s,%)) {
%(assert %s.length == inData.length;%)
int begin, num;
int lookback = %s_Lookback( %(%s... you get the idea
}}, TA_FUNC, FUNC_OUTS, FUNC_INS, FUNC_OUTS, TA_FUNC, ...);
}
enum MA_INS = [
"int MA_optInTimePeriod",
"int TA_MAType optInMAType"
];
enum MA_OUTS = [
"outMA"
];
mixin(DECL_TA_FUNC(TA_MA, MA_INS, MA_OUTS, somethingElse, whatever));
I didn't feel like translating that whole file. I think you can do it
with probably 25% of the size of that C macro code, and IMO much more
readable. No idea why you would prefer C preprocessor, D has far
superior string manipulation capabilities.
-Steve
More information about the Digitalmars-d
mailing list