Forwarding varadic function arguments

2016-03-03 Thread Nicholas Wilson via Digitalmars-d-learn

//f is a File*
void fwrite(int line = __LINE__)(...)
{
f.write("/*",line,"*/ ");
f.write(_argptr); //prints e.g 7FFF5B055440
}
basically i want
fwrite("1 ","2\t","3\n");
to print
/*7*/ 1 23

do I have to iterate through _argptr


Re: Forwarding varadic function arguments

2016-03-03 Thread Ali Çehreli via Digitalmars-d-learn

On 03/03/2016 04:50 PM, Nicholas Wilson wrote:
> //f is a File*
> void fwrite(int line = __LINE__)(...)
> {
>  f.write("/*",line,"*/ ");
>  f.write(_argptr); //prints e.g 7FFF5B055440
> }
> basically i want
> fwrite("1 ","2\t","3\n");
> to print
> /*7*/ 1 23
>
> do I have to iterate through _argptr

I think so. Also noting that C-style varargs can only work with 
fundamental types (Am I correct there? I am carrying this assumption 
from C++.), you may be happier with a template-parameter solution:


import std.stdio;

File f;

static this() {
f = File("hello_world.txt", "w");
}


//f is a File*
void fwrite(int line = __LINE__, Args...)(Args args)
{
f.write("/*",line,"*/ ");
f.write(args);
}

void main() {
fwrite("1 ","2\t","3\n");
}

Ali



Re: Forwarding varadic function arguments

2016-03-03 Thread Nicholas Wilson via Digitalmars-d-learn

On Friday, 4 March 2016 at 01:13:37 UTC, Ali Çehreli wrote:

On 03/03/2016 04:50 PM, Nicholas Wilson wrote:
> [...]

I think so. Also noting that C-style varargs can only work with 
fundamental types (Am I correct there? I am carrying this 
assumption from C++.), you may be happier with a 
template-parameter solution:


import std.stdio;

File f;

static this() {
f = File("hello_world.txt", "w");
}


//f is a File*
void fwrite(int line = __LINE__, Args...)(Args args)
{
f.write("/*",line,"*/ ");
f.write(args);
}

void main() {
fwrite("1 ","2\t","3\n");
}

Ali


The template works great.
Thanks!