On Mon, 16 Jan 2017 21:23:58 +0100
Damien Buhl
On 16/01/2017 09:54, Olaf van der Spek wrote:
http://abel.web.elte.hu/mpllibs/safe_printf/snprintf.html
It appears to only do checking at compile-time and then forwards to sprintf.. Yes the current implementation, but based on the expression template resulting from the parsing, one could easily produce at compile-time efficient code for formatting.
I have a project http://code.leeclagett.com/prima (currently just a redirect to github) which generates a spirit::karma expression from a C-string literal using metaparse. The functions are closely modeled on the C format functions, but take an output iterator or a std::ostream instead. The functions are also constexpr objects, so they should work with the Fit library. For some reason the README.md does not mention the `fprintf` function, but it is currently in the repo too (the thread-safe variant has not been pushed out yet). There are a decent number of tests that compare the results against the system C formatting functions. The compile times are not great; metaparse, proto, and spirit v2 are a rough combination. And the documentation is not 100% accurate - a number of format string errors are not trapped at compile-time yet. I'm hoping to get a nicer error reporting system, currently the wrong type can yield an impenetrable error from within spirit. The "backend" is currently configurable, and if you can make sense of my "IR" from the metaparse frontend an output system that does not use spirit could be written. It would likely result in faster compile times, but I didn't want to write a floating point generator since there was much to experiment with on the interface and format string parsing side. Perhaps something to do if there is interest ...
But I wasn't clear enough, I just wanted to tell that with the underlying library metaparse, one can do the compile-time dispatching. Naturally I think the compile-time cost would surely be higher than the cat() solution.
Lee