aliasing superclass constructors
Maxim Fomin
maxim at maxim-fomin.ru
Wed Dec 26 10:14:27 PST 2012
On Wednesday, 26 December 2012 at 17:11:31 UTC, Nick Treleaven
wrote:
> On 26/12/2012 15:13, Maxim Fomin wrote:
>> The problem is that Exception class ctor requires at least one
>> explicit
>> argument
>> (https://github.com/D-Programming-Language/druntime/blob/master/src/object.di#L339).
>>
>>
>> To solve the problem in general case you can either supply
>> default
>> arguments for all ctor parameters or define parameter-less
>> ctor.
>>
>> In your particular case because you cannot change Exception
>> you can
>> inherit not from Exception class but from intermediate one,
>> which does
>> one of the mentioned things:
>>
>> import std.stdio;
>>
>> class DException : Exception
>> {
>> this(string value = "") { super(value); }
>> }
>
> Thanks for the reply. But actually I'm not looking to define a
> parameter-less ctor for Exception subclasses, but to copy all
> of a parent class's constructors into a subclass. This is nice
> to do for Exception subclasses because sometimes I just want a
> new type that behaves exactly the same, but has different RTTI.
> But for other classes it can be useful if you want to override
> some methods, but don't need to add/change any constructors,
> apart from exposing them from the parent.
>
> I've found a relevant discussion:
> http://forum.dlang.org/post/op.u36pc3y4o7cclz@korden-pc
Currently dmd always creates implicit constructor for derived
classes if base class has a ctor. This can be prevented by
annotating ctor as a @disable, but it is unacceptable because you
have to write another constructor. So, there is no way for not
creating implicit constructor in a convenient way.
More information about the Digitalmars-d-learn
mailing list