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








 
  
  
 
 freeagle <freeagle inmail.sk>
 freeagle <freeagle inmail.sk> 