apply

Calls a the given callback with the static type of the contained value.

The handler callback must be a lambda or a single-argument template function that accepts all possible types that the given TaggedAlgebraic can hold.

  1. auto apply(TA ta)
    apply
    (
    alias handler
    TA
    )
    (
    TA ta
    )
    if (
    isInstanceOf!(TaggedAlgebraic, TA)
    )
  2. auto apply(T value)

Return Value

Type: auto

If handler has a non-void return value, its return value gets forwarded to the caller.

Examples

union U
{
	int i;
	string s;
}

alias TA = TaggedAlgebraic!U;

assert(TA(12).apply!((v) {
		static if (is(typeof(v) == int))
		{
			assert(v == 12);
			return 1;
		}
		else
		{
			return 0;
		}
	}) == 1);

assert(TA("foo").apply!((v) {
		static if (is(typeof(v) == string))
		{
			assert(v == "foo");
			return 2;
		}
		else
		{
			return 0;
		}
	}) == 2);

"baz".apply!((v) { assert(v == "baz"); });

Meta