|
Boost : |
From: Sean Parent (sparent_at_[hidden])
Date: 2001-10-25 21:30:54
I'm just getting started on a project using boost libraries and I've got a
fair amount of code that could be cleaned up to be submitted - I'm also
interested in hearing if there is overlap in the existing libraries that I'm
missing.
Ideas (I have all of these in various states of completeness):
1. Generalize mem_fn, mem_fun, ptr_fun... into a single make_function()
which uses template specialization to return an appropriate function object.
Include functionality to construct a function object from a data member
(given an object, returns the value of the data member).
1.1 Use make_function() to implement smarter versions of std algorithm
functions that don't require adaptors for many parameters.
2. Copy-on-write smart pointer. Useful in implementing data-types
efficiently with value semantics.
3. Transactional STL style containers - uses non-throwing swap member of
contained items to achieve efficient transactional operations.
4. Generalized notion of range to a single "object". A range is an
encapsulation of a pair of iterators (i.e. [iter1, iter2) is a range ). An
array constitutes a range as do any of the STL containers. Push ranges
through the STL containers and the algorithms.
5. Some utility algorithms - for example, I have a template function
lookup(Range, Conv, Value). Takes a range (as described above), a conversion
function (which takes an item in the range and converts it to a value) and a
value. lookup performs a linear search similar to find and return an
iterator to an item in the range for wish Conv(item) == Value. You can use
it like this:
--- typedef std::pair<int, std::string> int_float; int_float arr[] = { int_float(10, "Mark"), int_float(5, "Dave"), int_float(3, "John") }; std::cout << lookup(arr, &int_float::first, 5) << std::endl; std::cout << lookup(arr, &int_float::second, std::string("John")) << std::endl; --- This prints: --- Dave 3 --- You can call lookup with any range as the first parameter (any STL container will work) and anything that can generate a conversion function with make_function() - i.e. pointer to a member function, and external function, a function object constructed with compose... I have to run now so I'll stop here - just trying to gauge interest and get ideas. Thoughts? -- Sean Parent Sr. Computer Scientist II Advanced Technology Group Adobe Systems Incorporated sparent_at_[hidden]
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk