|
Boost : |
From: Daniel James (daniel_at_[hidden])
Date: 2005-10-09 04:58:21
Alexander Nasonov wrote:
> That's not quite right. For example
>
> #include <iostream>
> #include <boost/functional/hash.hpp>
>
> struct Base
> {
> bool operator==(Base) const { return true; }
> };
>
> std::size_t hash_value(Base)
> {
> return 0; // Base has no state
> }
>
> struct Derived : Base
> {
> int dummy;
> bool operator==(Derived other) const { return dummy == other.dummy; }
> };
OK, I thought you meant something else. It seems to me that in this
case, hash_value(Base) is a part of Base's interface - so any class that
derives from it should take it into account. It also appears that Base
wasn't really designed for derivation (despite its name ;), and it's
generally a bad idea to derive from such classes. I guess that's a bit
of a cop out answer, but this is more of a problem with the way the
derivation is done than Boost.Hash itself.
What I should do, is add some documentation about using Boost.Hash with
class inheritance. I'll try to do that soon-ish.
What do you think about having a macro to disable the extensions? Am I
right in thinking that your main concern is that the extensions are in
Boost.TR1?
Sorry for the late reply,
Daniel
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk