|
Boost Users : |
From: Tobias Schwinger (tschwinger_at_[hidden])
Date: 2007-06-24 05:01:48
Manuel Jung wrote:
> Hi
>
> The BOOST_PP_SEQ_PUSH_BACK Macro expands to the seq with the extra element.
> But i don't want it to expand.
So if the macro wouldn't expand it stays BOOST_PP_SEQ_PUSH_BACK(foo,bar)
(literally), which obviously is not a sequence...
> I want to use the sequence later instead.
Just do so (I'm not sure I understand what you're up to)!
BOOST_PP_SEQ_PUSH_BACK is a trivial macro mostly for completeness:
Instead of
BOOST_PP_SEQ_PUSH_BACK(SEQ, c)
you might as well say:
SEQ (c)
(subtle differences omitted, not to cause total confusion).
> How can i supress the expanding?
As it's the very nature of the preprocessor to expand all macro
invocations it sees, you can't in general.
You can delay the expansion of function-like macros by supplying the
argument list at a later point,
#define MACRO(optional) foo optional() baz
MACRO(BOOST_PP_EMPTY) // foo baz
MACRO(BOOST_PP_IDENTITY(bar)) // foo bar baz
// BTW: this techniques is used to avoid empty macro arguments
// which provoke undefined behavior with C++98
or making sure it's connected at a later point:
#define E() // Empty
#define X(x) x // eXpand
MACRO E () (BOOST_PP_EMPTY) // MACRO (BOOST_PP_EMPTY)
X( MACRO E () (BOOST_PP_EMPTY) ) // foo baz
X( MACRO E E () () (BOOST_PP_EMPTY) ) // MACRO (BOOST_PP_EMPTY)
X(X( MACRO E E () () (BOOST_PP_EMPTY) )) // foo baz
.
> I'm new too Preprocessorprogramming, so please excuse, if my question is
> stupid. Not the easiest thing, starting Preprocessor and Metaprogramming
> from nothing but the docs.
Search the list archives, there should be lots of good material, around.
http://news.gmane.org/gmane.comp.lib.boost.user
http://news.gmane.org/gmane.comp.lib.boost.devel
Regards,
Tobias
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net