Scripting with Variant from std.variant: parameter passing

Carl Sturtivant sturtivant at gmail.com
Sat Feb 3 18:07:22 UTC 2024


On Friday, 2 February 2024 at 20:58:12 UTC, Paul Backus wrote:
> Another variation on the same theme:
> ```d
> /// map over a variadic argument list
> template mapArgs(alias fun)
> {
> 	auto mapArgs(Args...)(auto ref Args args)
> 	{
> 		import std.typecons: tuple;
> 		import core.lifetime: forward;
> 		import std.meta: Map = staticMap;
>
> 		auto ref mapArg(alias arg)()
> 		{
> 			return fun(forward!arg);
> 		}
>
> 		return tuple(Map!(mapArg, args));
> 	}
> }
>
> import std.variant: Variant;
> import std.meta: allSatisfy;
>
> enum isVariant(T) = is(T == Variant);
>
> auto foo(Args...)(Args args)
>     if (!allSatisfy!(isVariant, Args))
> {
>     return .foo(mapArgs!Variant(args).expand);
> }
> ```

Thanks, will study the library machinery you used here.


More information about the Digitalmars-d-learn mailing list