Boost logo

Boost :

From: Rob Stewart (stewart_at_[hidden])
Date: 2004-05-24 08:29:12


From: David Abrahams <dave_at_[hidden]>
> Rob Stewart <stewart_at_[hidden]> writes:
> > From: "Reece Dunn" <msclrhd_at_[hidden]>
> >>
> >> Q: Since the above is valid C++, is the following?:
> >> virtual void myfn( char ) = 0;
> >> virtual void myfn( int, bool ) = 0;
> >
> > Absolutely. You can overload virtual functions just like
> > non-virtual functions.
>
> But unless they're all going to be overridden in one single class
> you're better off using the "template method pattern" and dispatching
> to differently-named functions to avoid problems with name
> hiding... or just be disciplined about bringing the base names into
> derived classes everywhere with "using".

Sure, but in the case leading to this query, they are const and
non-const versions of begin(), end(), rbegin(), and rend(). The
only opportunity for reuse of an underlying, common
implementation function, that I see is for the const overloads to
call the non-const overload.

The question is whether that is wise. Since the derived class
would implement the non-const version, there's no telling whether
it would try to modify the state of the object, so casting away
const-ness in order to call that overload from the const overload
could lead to undefined behavior.

As I see it, the derived class will have to implement all eight
of those functions, so they'll have to be pure virtual in the
base class.

-- 
Rob Stewart                           stewart_at_[hidden]
Software Engineer                     http://www.sig.com
Susquehanna International Group, LLP  using std::disclaimer;

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk