V Fri, 09 Jan 2015 07:21:02 -0500 Steven Schveighoffer via Digitalmars-d <digitalmars-d@puremagic.com> napsáno:
> On 1/9/15 6:57 AM, Daniel Kozak wrote: > > I often have code like this: > > > > class A { > > final: > > nothrow: > > ... > > some methods > > ... > > } > > > > Problem comes when I need add methods which for eg.: throws or need > > to be virtual. > > > > I can put them before final: but this is not perfect, because I > > prefer when methods are place in specific order (method abc call > > method asd so asd is bellow abc and so on). > > > > So today I download dmd source and make some small modification > > (only few lines) and this is the result: > > > > http://dpaste.dzfl.pl/472afc938397 > > Nice, but I don't like the fact that it bluntly returns all > attributes to default. > > For example, if you need to remove the final attribute, but not > nothrow, I'm assuming it looks something like: > > default nothrow void foo() > > which doesn't read very well. > > If we are going to do this, I'd rather see something like has been > suggested before -- parameterizing attributes: > > final(false) -> remove final > > This allows compile-time booleans to modify attributes in ways that > are extremely difficult in templates today. > > -Steve I think both ways shoud be available when I need remove just one attr than attr!false is nice but when I need remove for eg: 3 or more it will look like: void someFunc final(false) pure(false) nothrow(false) in this case I think that: default void foo() nothrow looks OK now :)