|
Boost : |
Subject: Re: [boost] [metaparse] Practical usefulness
From: Evgeny Panasyuk (evgeny.panasyuk_at_[hidden])
Date: 2015-06-03 17:32:03
03.06.2015 23:45, Abel Sinkovics:
>>> This approach to write a type-safe printf displays the characters
>>> one-by-one on an output stream. The printf library in Mpllibs does the
>>> validation at compile-time and calls the "unsafe" printf at runtime (and
>>> has therefore no runtime overhead).
>> Well that's assuming that printf() is efficient at runtime.
>> I would like to hope that
>>
>> string s = "hello" + t + "world";
>>
>> would be more efficient than
>>
>> string s =
>> wrapper_around_printf_returning_string("hello%sworld",t.c_str());
>>
>> If it isn't, we're in trouble :-)
> Given that the format string is known at compile-time, it should be
> possible to generate "optimal" code for it using a metaprogram. But that
> is significantly more complicated than what safe_printf currently offers.
JFYI, I made small test some time ago with "formatting" stuff at
compile-time (ad-hoc parsing, without Metaparse).
https://github.com/panaseleus/ctte
Following code:
{
int counter = 2;
char character = '!';
double value = 0.5;
for_each_part
(
auto x,
"val = $value$, cnt = $counter$, ch = $character$, again v=$value$;\n",
counter, character, value
)
{
print_it(x);
};
}
Produces identical ASM code to handwritten version:
{
int counter = 2;
char character = '!';
double value = 0.5;
print_it("val = ");
print_it(value);
print_it(", cnt = ");
print_it(counter);
print_it(", ch = ");
print_it(character);
print_it(", again v=");
print_it(value);
print_it(";\n");
}
Best Regards,
Evgeny Panasyuk
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk