digitalmars.D.learn - fix struct API with an interface
- Flamaros (6/6) Mar 06 2014 I add directx 9 support on DQuick and as some of renderer objects
- John Colvin (8/14) Mar 06 2014 I'm not sure I understand the question, but here's some facts
- Flamaros (6/22) Mar 06 2014 Ok, it's like I though final class and struct are equivalent when
- Dicebot (7/12) Mar 06 2014 They are equivalent when calling directly through class instance.
- Xavier Bigand (5/16) Mar 06 2014 In my case as I don't build openGL and DirectX module in the same
I add directx 9 support on DQuick and as some of renderer objects are declared as struct, it seems it can make them derives from an interface. Need I use final class instead to avoid virtual methods? PS: I am not planning to support run-time switch between OpenGL and directX renderers.
Mar 06 2014
On Thursday, 6 March 2014 at 13:26:27 UTC, Flamaros wrote:I add directx 9 support on DQuick and as some of renderer objects are declared as struct, it seems it can make them derives from an interface. Need I use final class instead to avoid virtual methods? PS: I am not planning to support run-time switch between OpenGL and directX renderers.I'm not sure I understand the question, but here's some facts that might help: struct methods are never virtual. final class methods are never virtual. structs do not support inheritance. Is the indirection caused by using an interface+class going to be a performance problem?
Mar 06 2014
On Thursday, 6 March 2014 at 13:35:13 UTC, John Colvin wrote:On Thursday, 6 March 2014 at 13:26:27 UTC, Flamaros wrote:Ok, it's like I though final class and struct are equivalent when calling a method (except the pointer deference, but it's minor I think). I don't think there is a real performance problem for us, it's more about to learn how to have a clean design.I add directx 9 support on DQuick and as some of renderer objects are declared as struct, it seems it can make them derives from an interface. Need I use final class instead to avoid virtual methods? PS: I am not planning to support run-time switch between OpenGL and directX renderers.I'm not sure I understand the question, but here's some facts that might help: struct methods are never virtual. final class methods are never virtual. structs do not support inheritance. Is the indirection caused by using an interface+class going to be a performance problem?
Mar 06 2014
On Thursday, 6 March 2014 at 14:28:13 UTC, Flamaros wrote:Ok, it's like I though final class and struct are equivalent when calling a method (except the pointer deference, but it's minor I think). I don't think there is a real performance problem for us, it's more about to learn how to have a clean design.They are equivalent when calling directly through class instance. When called though interface pointer, final class still results in vtable dispatch (because type system can't know stored class is final) But if you need to inherit from existing interface it is best thing you have anyway.
Mar 06 2014
Le 06/03/2014 19:08, Dicebot a écrit :On Thursday, 6 March 2014 at 14:28:13 UTC, Flamaros wrote:In my case as I don't build openGL and DirectX module in the same binary, it can share the same modules and classes names. So I'll use them through the class instead of the interface. Thank you for your explanations.Ok, it's like I though final class and struct are equivalent when calling a method (except the pointer deference, but it's minor I think). I don't think there is a real performance problem for us, it's more about to learn how to have a clean design.They are equivalent when calling directly through class instance. When called though interface pointer, final class still results in vtable dispatch (because type system can't know stored class is final) But if you need to inherit from existing interface it is best thing you have anyway.
Mar 06 2014