Re: Equivalent of C++ #__VA_ARGS__

2020-08-02 Thread Ronoroa via Digitalmars-d-learn

On Sunday, 2 August 2020 at 16:31:50 UTC, Adam D. Ruppe wrote:

On Sunday, 2 August 2020 at 16:05:07 UTC, Ronoroa wrote:
That doesn't seem to stringize the args part like in 
#__VA_ARGS__


oh yeah i missed that part.

D basically can't do that exactly, but if you pass the args as 
template things directly you can do this:


---
void main(string[] args) {
int a;
int b = 34;
dbg!(a, b); // notice the !
}

void dbg(Args...)(size_t line = __LINE__) {
import std.stdio;

write("#", line, ": ");
foreach(idx, alias arg; Args) {
if(idx) write(", ");
write(arg.stringof, " = ", arg);
}
writeln();
}
---

#4: a = 0, b = 34


Or reformat the output however you want.


That's so much nicer than the C++ macro. Thanks a lot!




Re: Equivalent of C++ #__VA_ARGS__

2020-08-02 Thread Adam D. Ruppe via Digitalmars-d-learn

On Sunday, 2 August 2020 at 16:05:07 UTC, Ronoroa wrote:
That doesn't seem to stringize the args part like in 
#__VA_ARGS__


oh yeah i missed that part.

D basically can't do that exactly, but if you pass the args as 
template things directly you can do this:


---
void main(string[] args) {
int a;
int b = 34;
dbg!(a, b); // notice the !
}

void dbg(Args...)(size_t line = __LINE__) {
import std.stdio;

write("#", line, ": ");
foreach(idx, alias arg; Args) {
if(idx) write(", ");
write(arg.stringof, " = ", arg);
}
writeln();
}
---

#4: a = 0, b = 34


Or reformat the output however you want.



Re: Equivalent of C++ #__VA_ARGS__

2020-08-02 Thread Ronoroa via Digitalmars-d-learn

On Sunday, 2 August 2020 at 15:48:34 UTC, Adam D. Ruppe wrote:

On Sunday, 2 August 2020 at 15:30:27 UTC, Ronoroa wrote:
void dbg(Args...)(Args args, size_t line = __LINE__) {
 writeln(line, args, " = ", print_func(args));
}

That doesn't seem to stringize the args part like in #__VA_ARGS__

I've tried

void dbg(Args...)(Args args, size_t line = __LINE__) {
writeln("#", line, ":", args, " = ");
// print_func is simply writeln
writeln(args);
}

void main() {
int a = 10, b = 4;
// gives #11 : 104 = 104
// what I crucially want #9 : a, b = 10, 4
// this
dbg(a, b);
}




Re: Equivalent of C++ #__VA_ARGS__

2020-08-02 Thread Adam D. Ruppe via Digitalmars-d-learn

On Sunday, 2 August 2020 at 15:30:27 UTC, Ronoroa wrote:

How do I achieve equivalent semantics of following C++ code?

```
#define dbg(...) std::cout << __LINE__ << #__VA_ARGS__ << " = " 
<< print_func(__VA_ARGS__) << std::endl;

```


You probably just want


void dbg(Args...)(Args args, size_t line = __LINE__) {
 writeln(line, args, " = ", print_func(args));
}


Equivalent of C++ #__VA_ARGS__

2020-08-02 Thread Ronoroa via Digitalmars-d-learn

How do I achieve equivalent semantics of following C++ code?

```
#define dbg(...) std::cout << __LINE__ << #__VA_ARGS__ << " = " 
<< print_func(__VA_ARGS__) << std::endl;

```