parent class get the subclass object
Nemanja Boric via Digitalmars-d
digitalmars-d at puremagic.com
Mon Jan 16 08:47:09 PST 2017
On Monday, 16 January 2017 at 16:31:41 UTC, Brian wrote:
> On Monday, 16 January 2017 at 12:20:47 UTC, rikki cattermole
> wrote:
>> On 17/01/2017 1:15 AM, Brian wrote:
>>> Dlang should support such coding. What should I do?
>>>
>>> import std.stdio : writeln;
>>>
>>> abstract class Base(T)
>>> {
>>> this()
>>> {
>>> _this = this;
>>> }
>>>
>>> void hello()
>>> {
>>> _this.world();
>>> }
>>>
>>> private
>>> {
>>> T _this;
>>> }
>>> }
>>>
>>>
>>> class Sub : Base!Sub
>>> {
>>> void world()
>>> {
>>> writeln("Hello world");
>>> }
>>> }
>>>
>>> void main()
>>> {
>>> Sub sub = new Sub;
>>> sub.hello();
>>> }
>>>
>>
>> FYI, this would have been more appropriate in D.learn instead
>> of the main forum.
>>
>> import std.stdio;
>>
>> abstract class Base {
>> void hello() {
>> world();
>> }
>>
>> void world();
>> }
>>
>> class Sub : Base {
>> override void world() {
>> writeln("Hello World");
>> }
>> }
>>
>> void main() {
>> Sub sub = new Sub;
>> sub.hello();
>> }
>
> No, you don't understand I want to express meaning.
>
> other programing language is allow this.
>
> Your code more like the old C++.
>
> If a high-level programing language or need haevy like C++ impl
> code, It's very regret.
>
> Can like rust / swift / php / java / C# ?
You're missing a cast, since `this` is a reference to a
superclass.
import std.stdio : writeln;
abstract class Base(T)
{
this()
{
_this = cast(T)(this);
assert(_this);
}
void hello()
{
_this.world();
}
private
{
T _this;
}
}
class Sub : Base!Sub
{
void world()
{
writeln("Hello world");
}
}
void main()
{
Sub sub = new Sub;
sub.hello();
}
More information about the Digitalmars-d
mailing list