On Fri, Jul 29, 2011 at 3:42 AM, Larry Gritz <[email protected]> wrote:
> Upon reflection, I think I'm totally comfortable for the no-variadic-template
> problem to be solved by just explicitly defining the templates for the 1-arg,
> 2-arg, ..., n-arg cases?  I bet n == 10, as you have it, is plenty for any
> use within OIIO.

Right.

> If we ever go over that, it would only be slightly, and easy to amend by hand
> without even needing to worry about running Python scripts to auto-generate.

I'm confused by why this is really a problem.  The python script is
super easy to run, (just download cog.py and run "cog.py -r
tinyformat.h") and since the generated code is included with the source,
that only needs to be done by *one single developer*, a single time when
they go over the n==10 limit.  They commit the result of re-running the
generator, and that is that.

If you need a very large number of format specifiers in a string it's
also possible to split them up over a few calls, as follows:

std::ostringstream msg;
tfm::format(msg, "blah blah %this %that ...", ...);
tfm::format(msg, "next thing %this %that ...", ...);
tfm::format(msg, "final bit %this %that ...", ...);
// now do something with msg.str();

this will also be a handy trick if some of the formatting needs to be
conditional.

> The biggest trick is just defining the macro that correctly detects which
> compilers support variadic templates.

Even g++ won't use variadic templates by default, you need to be
compiling in --std=c++0x mode.  tinyformat already has a macro near the
top that autodetects whether g++ is running in the correct mode, and
uses the variadic templates support if possible.

~Chris
_______________________________________________
Oiio-dev mailing list
[email protected]
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to