UnderscoreOpDispatcher

Mixin template generating an opDispatch redirecting calls to members whose names match the passed variable string but with an underscore prepended.

Members

Functions

opDispatch
auto ref opDispatch()

Accessor.

opDispatch
auto ref opDispatch(T value)

Mutator.

Mixins

__anonymous
mixin MixinConstraints!((MixinScope.struct_ | MixinScope.class_ | MixinScope.union_), typeof(this).stringof)
Undocumented in source.

Examples

1 {
2     struct Foo
3     {
4         int _i;
5         string _s;
6         bool _b;
7         string[] _add;
8         alias wordList = _add;
9 
10         mixin UnderscoreOpDispatcher;
11     }
12 
13     Foo f;
14     f.i = 42;         // f.opDispatch!"i"(42);
15     f.s = "hello";    // f.opDispatch!"s"("hello");
16     f.b = true;       // f.opDispatch!"b"(true);
17     f.add("hello");   // f.opDispatch!"add"("hello");
18     f.add("world");   // f.opDispatch!"add"("world");
19 
20     assert(f.i == 42);
21     assert(f.s == "hello");
22     assert(f.b);
23     assert(f.wordList == [ "hello", "world" ]);
24 
25     // ref auto allows this
26     ++f.i;
27     assert(f.i == 43);
28 
29     /+
30         Returns `this` by reference, so we can chain calls.
31      +/
32     auto f2 = Foo()
33         .i(9001)
34         .s("world")
35         .b(false)
36         .add("hello")
37         .add("world");
38 
39     assert(f2.i == 9001);
40     assert(f2.s == "world");
41     assert(!f2.b);
42     assert(f2.wordList == [ "hello", "world" ]);
43 }
44 {
45     struct Bar
46     {
47         string[string] _aa;
48 
49         mixin UnderscoreOpDispatcher;
50     }
51 
52     Bar bar;
53     bar.aa = [ "hello" : "world" ];
54     bar.aa = [ "foo" : "bar" ];
55     assert(bar.aa == [ "hello" : "world", "foo" : "bar"]);
56 }

Meta