digitalmars.D - parent class get the subclass object
- Brian (29/29) Jan 16 2017 Dlang should support such coding. What should I do?
- rikki cattermole (19/48) Jan 16 2017 FYI, this would have been more appropriate in D.learn instead of the
- Brian (8/64) Jan 16 2017 No, you don't understand I want to express meaning.
- Nemanja Boric (32/102) Jan 16 2017 You're missing a cast, since `this` is a reference to a
- Brian (2/35) Jan 16 2017 Yes, it's possible, thank you!
- Mike Parker (17/23) Jan 16 2017 Perhaps template this parameters [1]:
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(); }
Jan 16 2017
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(); }
Jan 16 2017
On Monday, 16 January 2017 at 12:20:47 UTC, rikki cattermole wrote:On 17/01/2017 1:15 AM, Brian wrote: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.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(); }
Jan 16 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: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(); }On 17/01/2017 1:15 AM, Brian wrote: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.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(); }
Jan 16 2017
On Monday, 16 January 2017 at 16:47:09 UTC, Nemanja Boric wrote:On Monday, 16 January 2017 at 16:31:41 UTC, Brian wrote:Yes, it's possible, thank you![...]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(); }
Jan 16 2017
On Monday, 16 January 2017 at 16:31:41 UTC, Brian wrote: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.Perhaps template this parameters [1]: ``` class Base { void hello(this C)() { (cast(C)this).world(); } } class Sub:Base { void world() { writeln("Hello world"); } } void main() { auto sub = new Sub; sub.hello(); } ``` [1] http://dlang.org/spec/template.html#TemplateThisParameter
Jan 16 2017
On Monday, 16 January 2017 at 19:31:50 UTC, Mike Parker wrote:On Monday, 16 January 2017 at 16:31:41 UTC, Brian wrote:That Great!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.Perhaps template this parameters [1]: ``` class Base { void hello(this C)() { (cast(C)this).world(); } } class Sub:Base { void world() { writeln("Hello world"); } } void main() { auto sub = new Sub; sub.hello(); } ``` [1] http://dlang.org/spec/template.html#TemplateThisParameter
Jan 16 2017
On Monday, 16 January 2017 at 19:31:50 UTC, Mike Parker wrote:On Monday, 16 January 2017 at 16:31:41 UTC, Brian wrote:Thanks, I think this is the best way!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.Perhaps template this parameters [1]: ``` class Base { void hello(this C)() { (cast(C)this).world(); } } class Sub:Base { void world() { writeln("Hello world"); } } void main() { auto sub = new Sub; sub.hello(); } ``` [1] http://dlang.org/spec/template.html#TemplateThisParameter
Jan 16 2017