From: Galup, L. E (Research) <ga...@cr...> - 2002-04-17 14:56:32
|
i think that making ::sum an external function may be conceptually more satisfying, however, it may not be the best software solution, IMHO. making something as simple as ::sum() an external function seems a bit like overkill. also, i see nothing wrong with putting a few, small, very useful methods on an oft used class like vnl_vector. it is, after all, more convenient. you may consider putting sum as an inline function to speed things up a bit (should you choose to optimize), with the penalty of perhaps increasing the object code size. luis -----Original Message----- From: Ian Scott [mailto:ian...@st...] Sent: Wednesday, April 17, 2002 9:55 AM To: 'Peter Vanroose' Cc: Vxl-maintainers (E-mail) Subject: RE: [Vxl-maintainers] no vnl_vector<>::sum Peter, > > Unless anyone objects in the few days, I will put a sum() > method into > > vnl_vector. > > What about an "external" function I agree that this would be ideal However, there are several other methods of vnl_vector (mean, max_value, etc.) that are philosophically similar to sum. So there are 4 options. 1. Leave vnl_vector::mean(), etc alone and ad vnl_vector_sum as an external function in vnl_vector.h This is inconsistent, and potentially confusing. 2. Move the vnl_vector::mean(), max_value() functions out of the class to become external functions like vnl_vector_sum(). This is a lot of work. I really don't want to spend time doing this. 3. Add sum as a member of vnl_vector Least hassle. My preference 4. Do nothing. My second preference. Ian. _______________________________________________ Vxl-maintainers mailing list Vxl...@li... https://lists.sourceforge.net/lists/listinfo/vxl-maintainers |
From: Andrew F. <aw...@ro...> - 2002-04-19 13:50:32
|
I agree with ian that it should either be a member, or all the other "convenience" members should be broken out. Everyone should have a good read of the best C++ article I've seen in a long time: "non-virtual member functions considered harmful". Read it carefully, the title is ironic, but the message is spot on. I found one here http://groups.google.co.uk/groups?hl=en&safe=off&selm=3C681444.8000001%4 0acm.org&rnum=1 > i think that making ::sum an external function > may be conceptually more satisfying, however, it > may not be the best software solution, IMHO. > > making something as simple as ::sum() an external function > seems a bit like overkill. also, i see nothing wrong > with putting a few, small, very useful methods on an oft used > class like vnl_vector. it is, after all, more convenient. In our example, the Thessman principle amounts to this: Some would say that making something as simple as sum a *member* is overkill, elspecially when it's just syntactic sugar for the STL's accumulate. It should probably be inline T sum(vcl_vector<T> const& v) { return vcl_accumulate(v.begin(), v.end(), T(0), plus<T>()); } Of course, we still don't really trust the STL, so we use inline T sum(vcl_vector<T> const& v) { return vcl_c_vector<T>::sum(v.begin(), v.size()); } |