Specializing on Compile Time Constants

dsimcha dsimcha at yahoo.com
Mon Oct 12 15:11:47 PDT 2009


== Quote from Jacob Carlborg (doob at me.com)'s article
> On 10/12/09 23:55, dsimcha wrote:
> > == Quote from Jacob Carlborg (doob at me.com)'s article
> >> On 10/12/09 23:49, dsimcha wrote:
> >>> I'm working on a mathematical expression interpreter for D, which would allow
> >>> for closed form mathematical expressions to be specified as string literals at
> >>> runtime and be evaluated.  For example:
> >>>
> >>> MathExp myExpression = mathExp("x^2 + e^cos(-x) - 2 * sqrt(pi)", "x");
> >>> writeln(myExpression(2));  // Does exactly what you think it does.
> >>>
> >>> I've found the syntax so convenient that I'd like to transparently specialize
> >>> it on strings known at compile time.  The idea is that, when the expression is
> >>> hard-coded, you will still be able to use the MathExp interface, but your
> >>> expression will evaluate at the full speed of a statically compiled function.
> >>>    Is there any way to test whether the value of an argument to a template
> >>> function is known at compile time and specialize on this?
> >> Doesn't all values to a template have to be known at compile time
> >
> > No, I mean the *function* parameters of a template function.
> Can't you pass the values as template arguments? Seems you working with
> strings (and numbers?). mathExp!("x^2 + e^cos(-x) - 2 * sqrt(pi)", "x");
> Note the ! after the function name.

This would work, but it's a bit kludgey because it requires the user to explicitly
specify that the string is known at compile time.  I was wondering if this could
be done transparently.



More information about the Digitalmars-d mailing list