"inout return type" and "inout variable"

Hong Wing Hong_member at pathlink.com
Wed Mar 15 22:34:34 PST 2006


Thanks everyone here for your great work in D, especially Walter who makes it
all happen.
Here I am requesting a feature, which is "inout variable" and "inout return
type"
Rationale, for the example below,

struct Foo
{
int x, int y, int z;
}

class Bar
{
private:
Foo m_foo;
public:
Foo foo() { return m_foo; }
Foo foo(Foo value) { return m_foo = value; }
}

now if i want to change the value of m_foo.x to 5, i have to do

Foo foo = bar.foo;
foo.x   = 5;
bar.foo = foo;

it would be nice if I can define a return type as "inout Foo"
inout Foo foo() { return m_foo;}

To extend it further, one might want to define inout variables as
inout Foo foo = bar.foo;

Advantages:

1. efficiency, one can directly change the states of the struct instead of
making a copy first, change the copy, and put the result back to the struct

2. less buggy, having to type 3 lines always increases chance of bugs, also,
someone might inadvertantly do bar.foo.x = 5 and forgot that he is working on a
copy

3. reduce the use of pointers, the above can be achieved using pointers, but it
means defining two versions of the same method every time a struct property is
written.





More information about the Digitalmars-d mailing list