On Mon, 04 Oct 2010 16:14:44 -0400, Jonathan M Davis <jmdavisp...@gmx.com>
wrote:
On Monday 04 October 2010 11:26:17 Steven Schveighoffer wrote:
What possible use case could private methods being polymorphic allow?
A private method can only be called by the class that contains the
implementation. Allowing base classes to call it makes no sense.
Make the method protected, it gives the desired effect (including for
the
example in the bug report as stated by the original reporter).
-Steve
It allows for the non-virtual interface pattern. You declare a final
public
function on the base clase which calls a private virtual one (which is
probably
abstract). Derived classes then override the private virtual method.
This allows
the base class to enforce things about the private virtual method - for
instance
pre and post conditions on the public final method would then always
apply to the
private virtual method. Only the base class can actually call the private
virtual method, but it still allows for the derived classes to override
its
functionality. It's a useful idiom which D doens't currently support but
which
TDPL specifically discusses and claims that D supports.
Take at look at these for more info:
http://www.gotw.ca/publications/mill18.htm
http://en.wikibooks.org/wiki/More_C++_Idioms/Non-Virtual_Interface
To me, making it private doesn't do anything over protected. A derived
class can still call the function in question, because it has the
implementation. I don't see what the point is...
A derived class from the derivative doesn't have access, but it can always
override it in order to be able to call it (not a good workaround to
require). Not to mention that you can't call the parent class' version,
so you can't keep that behavior intact.
I see nothing but annoyance for using private virtual functions.
-Steve