On Monday, 1 June 2015 at 16:09:34 UTC, Dan Olson wrote:
"Atila Neves" <atila.ne...@gmail.com> writes:

On Sunday, 31 May 2015 at 09:13:33 UTC, Ola Fosheim Grøstad wrote:
On Sunday, 31 May 2015 at 08:51:00 UTC, Atila Neves wrote:
While C++ programmers should try and avoid the preprocessor as much as possible, sometimes it just isn't possible to do so. There's just no other way to generate code sometimes. I know, I've tried.

In what case is this true? If it is only to avoid some boiler plate then it is not a good excuse, IMO. You can usually avoid macros by restructuring composition (using multiple layers of templates).

I'll take a macro over boilerplate any day of the week and twice on
Sundays.

Timely! I and stack overflow struggled for a couple hours to find an equivalent C++ template for something that was straightforward with a
couple macros.

I use macros for stuff like exceptions all the time - e.g.

THROW(MyException, ("This value is wrong: %d", foo));

The macro handles logging the exception, getting and setting the stacktrace on the exception, setting the file and line number of the exception, as well as constructing the string for the exception's message given the arguments - and of course finally throwing it. You _are_ still forced to call format in D (whereas that macro does it for you), but aside from that, the built-in exception stuff does all of that for you by simply throwing a new exception with a message, whereas C++ doesn't even come close. Without a macro, getting all of the information in C++ - and doing it consistently and correctly - would be a big problem.

Yes, macros should be avoided in general, but there are areas where you really don't have much choice, and saying that all macros are unequivocably bad is quite short-sighted. It's when macros are used when they aren't needed that it's a problem.

Coming out of college, I actually believed the dogma that all macros are bad, but experience has shown me that that's just not true. Sure, it would be nice if we had a better solution in C++, but sometimes we just don't.

- Jonathan M Davis

Reply via email to