varargs when they're not all the same type?
H. S. Teoh
hsteoh at qfbox.info
Thu Mar 14 18:05:59 UTC 2024
On Thu, Mar 14, 2024 at 05:57:21PM +0000, Andy Valencia via Digitalmars-d-learn wrote:
> Can somebody give me a starting point for understanding varadic
> functions? I know that we can declare them
>
> int[] args...
>
> and pick through whatever the caller provided. But if the caller
> wants to pass two int's and a _string_? That declaration won't permit
> it.
>
> I've looked into the formatter, and also the varargs implementation.
> But it's a bit of a trip through a funhouse full of mirrors. Can
> somebody describe the basic language approach to non-uniform varargs,
> and then I can take it the rest of the way reading the library.
[...]
The best way to do multi-type varags in D is to use templates:
import std;
void myFunc(Args...)(Args args) {
foreach (i, arg; args) {
writefln("parameter %d is a %s with value %s",
i, typeof(arg), arg);
}
}
void main() {
myFunc(123, 3.14159, "blah blah", [ 1, 2, 3 ], new Object());
}
D also supports C-style varags (without templates), but it's not
recommended because it's not type-safe. You can find the description in
the language docs.
T
--
"Maybe" is a strange word. When mom or dad says it it means "yes", but when my big brothers say it it means "no"! -- PJ jr.
More information about the Digitalmars-d-learn
mailing list