On Wednesday, 1 January 2014 at 14:30:46 UTC, Gary Willoughby wrote:
On Wednesday, 1 January 2014 at 12:09:40 UTC, Jacob Carlborg wrote:
On 2014-01-01 01:52, Frustrated wrote:
Is there an easy way to implement properties of an interface within a class instead of having to duplicate almost the exact same code with
generic properties?

interface A
{
   @property int data();
   @property int data(int value);

}

class B : A
{
 @property int data() { return m_data; } // read property
@property int data(int value) { return m_data = value; } // write
property
}

You can't use an abstract class?

Yes this is the ideal time to use an abstract base class and is what i would do.

The same thing *could* be achieved using mixin templates, with or without scopes but could lead to unmaintainable code. See the examples on mixin templates here: http://nomad.so/2013/07/templates-in-d-explained/


With abstract classes I would still have to implement generic code and it would not be much different than using a standard class(The inheritance is only about 2 levels deep but many interfaces).

I don't see how the mixin method would be unmaintainable since it simply implements what hasn't been implemented(it could lead to bugs if one forgets to implement stuff but that's easy to check(functions could throw exceptions in "retail" build)).

Basically Adam's approach is what I was looking for as I see it as the best way unless you have any specific reasons why it doesn't work well. (of course the interface implementer isn't robust but I'm working on that)

Reply via email to