Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.stdio;
- struct Wrapper(T) {
- @property T get() {
- return getter_();
- }
- ref Wrapper opAssign(T value) {
- setter_(value);
- return this;
- }
- ref Wrapper opOpAssign(string op : "+")(T value) {
- setter_(getter_() + value);
- return this;
- }
- ref Wrapper opOpAssign(string op : "-")(T value) {
- setter_(getter_() - value);
- return this;
- }
- ref Wrapper opOpAssign(string op : "*")(T value) {
- setter_(getter_() * value);
- return this;
- }
- ref Wrapper opOpAssign(string op : "/")(T value) {
- setter_(getter_() / value);
- return this;
- }
- T delegate() getter_;
- void delegate(T) setter_;
- alias get this;
- }
- struct Foo {
- @property Wrapper!int value() {
- return Wrapper!int(&getValue, &setValue);
- }
- @property Wrapper!int value(int value) {
- return Wrapper!int(&getValue, &setValue) = value;
- }
- private:
- int value_;
- int getValue() const {
- return value_;
- }
- void setValue(int value) {
- value_ = value;
- }
- }
- int main(string[] args) {
- Foo foo;
- foo.value = 20;
- writeln(foo.value_);
- foo.value += 15;
- writeln(foo.value_);
- foo.value--;
- writeln(foo.value_);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement