Alternative to C++ macro in D

Alexandru Ermicioi alexandru.ermicioi at gmail.com
Sun Nov 3 17:26:17 UTC 2019


On Sunday, 3 November 2019 at 16:55:36 UTC, Vinod K Chandran 
wrote:
> Hi all,
> I can do this in C++.
> #include <iostream>
> using namespace std ;
>
> #define end };
> #define log(x)  cout << x << endl
> #define wait std::cin.get()
>
>
> int main() {
>     log("Trying to avoid the visual clutter aused by closing 
> curly braces") ;
>     string myStr = "Now, code looks more elegant" ;
>     log(myStr) ;
>     wait ;
> end
> How can i do this in D ? Especially the " #define end }; ". 
> I've tried " alias end = } " but didn't worked.
> Edit : How can add syntax highlighting and coloring in code 
> posted on this comment ?

If this is about logging functionality, check 
std.experimental.log package, it contains all necessary logging 
functionality.

About macros there aren't any similar to preprocessor macros in 
c/c++, however you can replace them with three options depending 
on your needs:

1. Just a simple function in conjunction eith ctfe: 
https://tour.dlang.org/tour/en/gems/compile-time-function-evaluation-ctfe
2. string mixins: https://dlang.org/articles/mixin.html
3. template mixins: https://dlang.org/spec/template-mixin.html

I'd say number 2 should be suitable for your example given you'd 
like to inject statements into body of some function.

Best regards,
Alexandru.


More information about the Digitalmars-d-learn mailing list