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