|
|
|
|
|
by Xuzz
5648 days ago
|
|
My question was more of if you have multiple statements, instead of a single expression, you wanted to stick inside a macro and preserve the ability to call it within another expression. For example: #define SOMEMACRO(x) do { \
int y=0; \
for(int i=0; i<x; i++) \
y=dosomething(y, i); \
} while (0)
Which, of course, works fine if you call it as a statement. But it doesn't work if you want to somehow "return" the value of "y" from that: there's no way to embed that kind of loop into an expression.He showed an example of using Apple's Blocks to solve that, can you do the same with C++0x lambdas? |
|
... but you probably shouldn't: don't use a macro where a function will suffice, and if you need to use a macro, write a macro that syntactically wraps around a function if possible. C++, especially 0x, provides a lot of metaprogramming functionality you can use to avoid writing macros in many cases. Using this functionality will give the compiler more information about your program for analysis purposes, which means the compiler can help ensure correctness and better efficiency.