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(T value)

Mutator.

opDispatch
auto ref opDispatch()

Accessor.

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 }