View mode: basic / threaded / horizontal-split · Log in · Help
September 11, 2012
Re: Templates class member functions not conditional?
On Tuesday, 11 September 2012 at 16:34:33 UTC, monarch_dodra 
wrote:
> At the very least, I wish we could write:
> --------
> struct S(T)
> {
>     @property void front(T value)
>         if(isAssignable!(T,T))
>     {
>         ...
>     }
> }
> --------

..Yeah... that wouldn't work would it?

That would just prevent "front" from being matched when the call 
is attempted, but since it is a non-template, it will still get 
compiled...

Wish it did work though!

Well... time to move on...
September 11, 2012
Re: Templates class member functions not conditional?
On Tuesday, 11 September 2012 at 10:51:35 UTC, monarch_dodra
wrote:
> [SNIP]

One of my gripes was that the static if creates a new block,
which brakes a struct/class's natural flow. The code gets
indented, the DDoc gets placed further away from the function's
name, teh condition gets placed kind of far from the function's
name etc...

However, when written like this:

struct C(T)
{
     private T val;

     // Gets front
     @property T front()
     {val = value;}

     //Writes to front
     static if(isAssignable!(T,T))
     @property void front(T value)
     {val = value;}
}

Then I think it reads alright.

I think I'll come to grips with this.
September 11, 2012
Re: Templates class member functions not conditional?
On Tuesday, September 11, 2012 19:37:02 monarch_dodra wrote:
> However, when written like this:
> 
> struct C(T)
> {
>       private T val;
> 
>       // Gets front
>       @property T front()
>       {val = value;}
> 
>       //Writes to front
>       static if(isAssignable!(T,T))
>       @property void front(T value)
>       {val = value;}
> }
> 
> Then I think it reads alright.

Whereas I think that that hards readibility, because it hides the fact that a 
static if is used. If you're submitting code for Phobos, please do something 
like

static if(isAssignable!(T, T)) @property void front(T value) {val = value;}

or

static if(isAssignable!(T,T))
   @property void front(T value) { value = value; }

rather than what you have above, otherwise it will harm maintainability.

- Jonathan M Davis
September 11, 2012
Re: Templates class member functions not conditional?
On Tuesday, 11 September 2012 at 17:52:44 UTC, Jonathan M Davis 
wrote:
> On Tuesday, September 11, 2012 19:37:02 monarch_dodra wrote:
>> However, when written like this:
>> 
>> struct C(T)
>> {
>>       private T val;
>> 
>>       // Gets front
>>       @property T front()
>>       {val = value;}
>> 
>>       //Writes to front
>>       static if(isAssignable!(T,T))
>>       @property void front(T value)
>>       {val = value;}
>> }
>> 
>> Then I think it reads alright.
>
> Whereas I think that that hards readibility, because it hides 
> the fact that a
> static if is used. If you're submitting code for Phobos, please 
> do something
> like
>
> static if(isAssignable!(T, T)) @property void front(T value) 
> {val = value;}
>
> or
>
> static if(isAssignable!(T,T))
>     @property void front(T value) { value = value; }
>
> rather than what you have above, otherwise it will harm 
> maintainability.
>
> - Jonathan M Davis

Hum... Yeah, you are kind of right.

I actually am committing something, but the code is a 2 liner. 
(enforce, then assignment).

Is one of these what you are suggesting?

//One
static if(isAssignable!(T,T)) @property void front(T value)
{
    enforce(someCondition)
    value = value;
}

or

//Two
static if(isAssignable!(T,T))
    @property void front(T value)
{
    enforce(someCondition)
    value = value;
}

or

//Three
static if(isAssignable!(T,T))
@property void front(T value)
{
    enforce(someCondition)
    value = value;
}


(or just plain)

//Four
static if(isAssignable!(T,T))
{
    @property void front(T value)
    {
        enforce(someCondition)
        value = value;
    }
}

Which do YOU think reads best in this case? That the style I'll 
use in my submit.

I like //Three because it reads like an attribute.

Of course, I have no problem submitting it with the default 
//Four if you think that is best. I'm just trying to do as best 
possible.
September 11, 2012
Re: Templates class member functions not conditional?
On Tuesday, September 11, 2012 20:39:55 monarch_dodra wrote:
> Is one of these what you are suggesting?
> 
> //One
> static if(isAssignable!(T,T)) @property void front(T value)
> {
>      enforce(someCondition)
>      value = value;
> }
> 
> or
> 
> //Two
> static if(isAssignable!(T,T))
>      @property void front(T value)
> {
>      enforce(someCondition)
>      value = value;
> }
> 
> or
> 
> //Three
> static if(isAssignable!(T,T))
> @property void front(T value)
> {
>      enforce(someCondition)
>      value = value;
> }
> 
> 
> (or just plain)
> 
> //Four
> static if(isAssignable!(T,T))
> {
>      @property void front(T value)
>      {
>          enforce(someCondition)
>          value = value;
>      }
> }
> 
> Which do YOU think reads best in this case? That the style I'll
> use in my submit.
> 
> I like //Three because it reads like an attribute.
> 
> Of course, I have no problem submitting it with the default
> //Four if you think that is best. I'm just trying to do as best
> possible.

I'd use either one or four. I would definitely _not_ use three, precisely 
because it's using no indentation at all. Either the signature should be one 
line, or it needs indentation.

- Jonathan M Davis
September 12, 2012
Re: Templates class member functions not conditional?
On Tuesday, 11 September 2012 at 21:44:50 UTC, Jonathan M Davis 
wrote:
>
> I'd use either one or four. I would definitely _not_ use three, 
> precisely
> because it's using no indentation at all. Either the signature 
> should be one
> line, or it needs indentation.
>
> - Jonathan M Davis

I decided to use the basic notation (Four). I don't think there 
is anything wrong with experimenting, just not in Phobos.

Thankyou.
Next ›   Last »
1 2
Top | Discussion index | About this forum | D home