Advertisement
Guest User

Untitled

a guest
Jul 6th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.17 KB | None | 0 0
  1. import std.stdio;
  2.  
  3. struct Wrapper(T) {
  4.     @property T get() {
  5.         return getter_();
  6.     }
  7.  
  8.     ref Wrapper opAssign(T value) {
  9.         setter_(value);
  10.         return this;
  11.     }
  12.  
  13.     ref Wrapper opOpAssign(string op : "+")(T value) {
  14.         setter_(getter_() + value);
  15.         return this;
  16.     }
  17.  
  18.     ref Wrapper opOpAssign(string op : "-")(T value) {
  19.         setter_(getter_() - value);
  20.         return this;
  21.     }
  22.  
  23.     ref Wrapper opOpAssign(string op : "*")(T value) {
  24.         setter_(getter_() * value);
  25.         return this;
  26.     }
  27.  
  28.     ref Wrapper opOpAssign(string op : "/")(T value) {
  29.         setter_(getter_() / value);
  30.         return this;
  31.     }
  32.  
  33.     T delegate() getter_;
  34.     void delegate(T) setter_;
  35.  
  36.     alias get this;
  37. }
  38.  
  39. struct Foo {
  40.     @property Wrapper!int value() {
  41.         return Wrapper!int(&getValue, &setValue);
  42.     }
  43.  
  44.     @property Wrapper!int value(int value) {
  45.         return Wrapper!int(&getValue, &setValue) = value;
  46.     }
  47.  
  48. private:
  49.     int value_;
  50.  
  51.     int getValue() const {
  52.         return value_;
  53.     }
  54.  
  55.     void setValue(int value) {
  56.         value_ = value;
  57.     }
  58. }
  59.  
  60. int main(string[] args) {
  61.     Foo foo;
  62.     foo.value = 20;
  63.     writeln(foo.value_);
  64.  
  65.     foo.value += 15;
  66.     writeln(foo.value_);
  67.  
  68.  
  69.     foo.value--;
  70.     writeln(foo.value_);
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement