Boost logo

Boost Users :

Subject: Re: [Boost-users] metafunction question
From: strasser_at_[hidden]
Date: 2010-05-12 14:56:43


Zitat von John Dlugosz <JDlugosz_at_[hidden]>:

>> While there are technical reasons not to do so (absence of virtual
>> destructor), there are also non technical ones.
>>
>> It simply doesn't make sense to use inheritance for this. Inheritance
>> is
>> for polymorphism, not code reuse.
>>
>> This is why for example free functions that take any range are better
>> than member functions.
>>
>
> So, you would prefer to use a generic programming model rather than
> member-function calling syntax? Do you write your classes to have
> only private virtual member functions, and declare non-member friend
> functions that take an instance as one of the parameters and call
> the virtual functions? No public members at all!
>
> If I have public member functions, and I want to extend that, it
> would be annoying to say "these 20 functions are members, and here
> is 1 more that is a non-member".
>

is your function an algorithm working WITH the container, or is it a
function providing access to the container's contents?
when you derive from a standard container without any additional
state, it's most likely the former.
for example, there is no std::vector::sort(), only std::sort(vector...)
(although it seems to me the standard library doesn't draw a clear
line there either. a lot of the member functions of std::string should
have been free function algorithms)


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net