digitalmars.D - Is this a bug?
- freeagle (19/19) Jul 08 2006 I have a class BaseWindow
- Tom S (11/33) Jul 08 2006 I don't remember the exact reason, but try aliasing 'size' from the
- freeagle (5/41) Jul 08 2006 the problem is not that i have to type a bit more to actually call the
- Tom S (8/12) Jul 08 2006 That may be because of the symbol resolution method that is currently
- freeagle (5/18) Jul 08 2006 well yeah, this way, you have to show whole inheritance tree to the user...
- freeagle (2/22) Jul 09 2006 ok, you dont, im taking back my last statements ;) thanks guys for the h...
- Bruno Medeiros (13/55) Jul 09 2006 The relevant doc specification, is on
I have a class BaseWindow { Dimension2D size() { return _size; } abstract void size(Dimension2D size); } and derived class Win32Window : BaseWindow { void size(Dimension2D size) { _size.set(size); } } lets say i have a reference to class Win32Window. When i try to call method _window.size(), compiler complains it doesn't match arguments size(Dimension2D). Until i specify is to (cast(BaseWindow)_window).size(). Why??
Jul 08 2006
freeagle wrote:I have a class BaseWindow { Dimension2D size() { return _size; } abstract void size(Dimension2D size); } and derived class Win32Window : BaseWindow { void size(Dimension2D size) { _size.set(size); } } lets say i have a reference to class Win32Window. When i try to call method _window.size(), compiler complains it doesn't match arguments size(Dimension2D). Until i specify is to (cast(BaseWindow)_window).size(). Why??I don't remember the exact reason, but try aliasing 'size' from the BaseWindow's scope, like: class Win32Window : BaseWindow { void size(Dimension2D size) { ..... } alias super.size size; // iirc } -- Tomasz Stachowiak /+ a.k.a. h3r3tic +/
Jul 08 2006
Tom S wrote:freeagle wrote:the problem is not that i have to type a bit more to actually call the method, i just don't understand why its not part of Win32Window interface, when Win32Window class is publicly derived from BaseWindow defining public method Dimension2D size();I have a class BaseWindow { Dimension2D size() { return _size; } abstract void size(Dimension2D size); } and derived class Win32Window : BaseWindow { void size(Dimension2D size) { _size.set(size); } } lets say i have a reference to class Win32Window. When i try to call method _window.size(), compiler complains it doesn't match arguments size(Dimension2D). Until i specify is to (cast(BaseWindow)_window).size(). Why??I don't remember the exact reason, but try aliasing 'size' from the BaseWindow's scope, like: class Win32Window : BaseWindow { void size(Dimension2D size) { ..... } alias super.size size; // iirc }
Jul 08 2006
freeagle wrote:the problem is not that i have to type a bit more to actually call the method, i just don't understand why its not part of Win32Window interface, when Win32Window class is publicly derived from BaseWindow defining public method Dimension2D size();That may be because of the symbol resolution method that is currently being attacked in various posts. In that one example of yours, the compiler figures out that you want a 'size' function of the Win32Window, it checks it and cant see the right version. It doesnt check the base class because of how the method resolution works. Weird, yeah :P -- Tomasz Stachowiak /+ a.k.a. h3r3tic +/
Jul 08 2006
Tom S wrote:freeagle wrote:well yeah, this way, you have to show whole inheritance tree to the user of the lib so he can use it. I think this damages encapsulation. I dont want the user to know there is a BaseWindow class, i want him to be happy just with a knowledge of Win32Window class.the problem is not that i have to type a bit more to actually call the method, i just don't understand why its not part of Win32Window interface, when Win32Window class is publicly derived from BaseWindow defining public method Dimension2D size();That may be because of the symbol resolution method that is currently being attacked in various posts. In that one example of yours, the compiler figures out that you want a 'size' function of the Win32Window, it checks it and cant see the right version. It doesnt check the base class because of how the method resolution works. Weird, yeah :P
Jul 08 2006
freeagle wrote:Tom S wrote:ok, you dont, im taking back my last statements ;) thanks guys for the helpfreeagle wrote:well yeah, this way, you have to show whole inheritance tree to the user of the lib so he can use it. I think this damages encapsulation. I dont want the user to know there is a BaseWindow class, i want him to be happy just with a knowledge of Win32Window class.the problem is not that i have to type a bit more to actually call the method, i just don't understand why its not part of Win32Window interface, when Win32Window class is publicly derived from BaseWindow defining public method Dimension2D size();That may be because of the symbol resolution method that is currently being attacked in various posts. In that one example of yours, the compiler figures out that you want a 'size' function of the Win32Window, it checks it and cant see the right version. It doesnt check the base class because of how the method resolution works. Weird, yeah :P
Jul 09 2006
freeagle wrote:Tom S wrote:The relevant doc specification, is on http://www.digitalmars.com/d/function.html , Function Inheritance and Overriding: "However, when doing overload resolution, the functions in the base class are not considered: [...] To consider the base class's functions in the overload resolution process, use an AliasDeclaration:" I'm also not sure if this is the ideal behavior. -- Bruno Medeiros - CS/E student http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#Dfreeagle wrote:the problem is not that i have to type a bit more to actually call the method, i just don't understand why its not part of Win32Window interface, when Win32Window class is publicly derived from BaseWindow defining public method Dimension2D size();I have a class BaseWindow { Dimension2D size() { return _size; } abstract void size(Dimension2D size); } and derived class Win32Window : BaseWindow { void size(Dimension2D size) { _size.set(size); } } lets say i have a reference to class Win32Window. When i try to call method _window.size(), compiler complains it doesn't match arguments size(Dimension2D). Until i specify is to (cast(BaseWindow)_window).size(). Why??I don't remember the exact reason, but try aliasing 'size' from the BaseWindow's scope, like: class Win32Window : BaseWindow { void size(Dimension2D size) { ..... } alias super.size size; // iirc }
Jul 09 2006