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