On Thu, Feb 9, 2012 at 1:13 AM, John M. Dlugosz
work, but I've kept up with my reading. So, might I get some advice on how to approach this problem?
I'm thinking of an assert-like statement that follows the syntax of Boost.Format, thus avoiding the variadic argument list.
But, I want to avoid doing any work except on failure. This means remembering the arguments including the following %arg stuff, and passing everything through to Boost.Format based on the condition.
This isn't metaprogramming -- or at least not new metaprogramming, rather taking advantage of an existing library -- but my colleague came up with what I consider a clever use of Boost.Lambda for a similar sort of problem. We wanted a macro with usage of the form: OURMACRO("some streaming expr " << value << ...); that would stream arbitrary objects as in: hidden_ostream_object << "some streaming expr " << value << ...; His solution is like this: template <typename FUNCTOR> void ourmacro_f(const FUNCTOR& f) { f(hidden_ostream_object); } #define OURMACRO(EXPRESSION) (ourmacro_f(boost::lambda::_1 << EXPRESSION))
So, what approach should I use? Plain MPL and classic metaprogramming? Fusion? Phoenix?
In this case I guess Phoenix would be the way to go rather than Boost.Lambda.