On Wednesday, 30 January 2013 at 04:39:13 UTC, Adam D. Ruppe wrote:
There's times when a member variable manages its own invariant and any of its values is valid for the containing class, in which case the container doesn't need to further restrict access to it; a public struct doesn't need to be wrapped in a get function or anything.

Okay, so we have this:

struct Foo
{
    Bar bar;
}

Assume that all data in Bar is stack allocated and we can't change it. What if I later on realize, that I should have really allocated bar on the heap, because its size is too great and it makes Foo inconvenient in every-day use because of stack overflow problems. Now that everybody has already been using foo.bar directly, I feel really bad for not encapsulating it.

Note: that's not a problem if we have a way of saying that bar should behave like a property function, something like:

struct Foo
{
    @property Bar bar;
}

...and if we can create that property function later on.

Reply via email to