== Quote from Jacob Carlborg (d...@me.com)'s article > On 10/12/09 23:55, dsimcha wrote: > > == Quote from Jacob Carlborg (d...@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.