digitalmars.D.learn - Format.convert problme
- Qian Xu (16/16) Apr 04 2009 Hi All,
- grauzone (9/26) Apr 04 2009 Check if the variable is a pointer, and if yes, dereference it:
- Qian Xu (3/13) Apr 06 2009 Hi again,
- Frank Benoit (9/30) Apr 04 2009 This is not really an exact answer to your question... :)
Hi All,
tango.text.convert.Format provides a nice function to convert anything
to string.
It works perfect except the argument is a pointer type.
It will print the address of a pointer instead of its value
For instance: --------------------------------
int* i = new int;
*i = 10;
Format.convert("{}", i); // <- the address of the pointer
----------------------------------------------
How to let it print the value instead of the address?
Because I wanna write a dump function to dump the value of any data type
(also void, null)
--
Xu, Qian (stanleyxu)
http://stanleyxu2005.blogspot.com
Apr 04 2009
Qian Xu wrote:
Hi All,
tango.text.convert.Format provides a nice function to convert anything
to string.
It works perfect except the argument is a pointer type.
It will print the address of a pointer instead of its value
For instance: --------------------------------
int* i = new int;
*i = 10;
Format.convert("{}", i); // <- the address of the pointer
----------------------------------------------
How to let it print the value instead of the address?
Because I wanna write a dump function to dump the value of any data type
(also void, null)
Check if the variable is a pointer, and if yes, dereference it:
alias typeof(i) T;
static if (is(T T2 : T2*)) {
T2 i2 = *i;
Format.convert("{}", i2);
} else {
Format.convert("{}", i);
}
Apr 04 2009
grauzone wrote:
Check if the variable is a pointer, and if yes, dereference it:
alias typeof(i) T;
static if (is(T T2 : T2*)) {
T2 i2 = *i;
Format.convert("{}", i2);
} else {
Format.convert("{}", i);
}
Hi again,
I cannot compile this code
Apr 06 2009
Qian Xu wrote:grauzone wrote:What exactly are you doing? What do you want to do? Without knowing this, we can only guess. My first reply to you was also just a guess. I thought maybe you had a templated function, and wanted to dump a templated variable, or so. Anyway, here's a complete version of my example above. It uses Stdout.formatln instead of Format.convert, but this shouldn't matter at all. import tango.io.Stdout; void main() { int v = 55; int *pv = &v; //pv (an int pointer) can be exchanged with v (an int), //and it still works auto i = pv; alias typeof(i) T; static if (is(T T2 : T2*)) { T2 i2 = *i; Stdout.formatln("{}", i2); } else { Stdout.formatln("{}", i); } }Check if the variable is a pointer, and if yes, dereference it: alias typeof(i) T; static if (is(T T2 : T2*)) { T2 i2 = *i; Format.convert("{}", i2); } else { Format.convert("{}", i); }Hi again, I cannot compile this code
Apr 06 2009
grauzone wrote:
mport tango.io.Stdout;
void main() {
int v = 55;
int *pv = &v;
//pv (an int pointer) can be exchanged with v (an int),
//and it still works
auto i = pv;
alias typeof(i) T;
static if (is(T T2 : T2*)) {
T2 i2 = *i;
Stdout.formatln("{}", i2);
} else {
Stdout.formatln("{}", i);
}
}
Thanks. Now I understood your code. ^^)
Apr 06 2009
Qian Xu schrieb:
Hi All,
tango.text.convert.Format provides a nice function to convert anything
to string.
It works perfect except the argument is a pointer type.
It will print the address of a pointer instead of its value
For instance: --------------------------------
int* i = new int;
*i = 10;
Format.convert("{}", i); // <- the address of the pointer
----------------------------------------------
How to let it print the value instead of the address?
Because I wanna write a dump function to dump the value of any data type
(also void, null)
This is not really an exact answer to your question... :)
It seems you want to output trace information. Stdout (which seems you
are using) is not thread safe and will generate AV/segf if accessed
concurrently.
Specially for printing trace info, there is
tango.util.log.Trace
it is a Stdout replacement that is synchronized, and it also has a
memory() function, that lets you print raw memory as a dump.
Apr 04 2009









Qian Xu <quian.xu stud.tu-ilmenau.de> 