Property discussion wrap-up

TommiT tommitissari at hotmail.com
Wed Jan 30 15:25:06 PST 2013


On Wednesday, 30 January 2013 at 19:44:43 UTC, TommiT wrote:
> [..]

More of fleshing out of namespace_thingy:

struct S
{
private:
     int m_startTime;
     int m_endTime;
     int m_duration;

public:
     namespace_thingy start
     {
         int opGet() const { return m_startTime; }

         start opAssign(int t)
         {
             m_startTime = t;
             m_duration = m_endTime - m_startTime;
             return start;
         }
     }

     namespace_thingy end
     {
         int opGet() const { return m_endTime; }

         end opAssign(int t)
         {
             m_endTime = t;
             m_duration = m_endTime - m_startTime;
             return end;
         }

         dur opAssign(string s : "+")(int t)
         {
             m_endTime += t;
             m_duration = m_endTime - m_startTime;
             return dur;
         }
     }

     namespace_thingy dur
     {
         dur opAssign(int t)
         {
             m_duration = t;
             m_endTime = m_startTime + m_duration;
             return dur;
         }

         bool opEquals(int t) const
         {
             return m_duration == t;
         }
     }

     this(int t)
     {
         start = 0;
         end = t;
         assert(dur == 100);
     }
}

...

S s;
s.start = 1;
s.end = 8;
assert(s.dur == 7);
s.end += 3;
assert(s.dur == 10);

int v = s.start;

s.start += 42; // error: no match for opAssign!"+"(S.start, int)
                //                 nor opAssign!"+"(int, int)
int d = s.dur; // error: no conversion from S.dur to int


More information about the Digitalmars-d mailing list