On 2010-05-25 18:27:32 -0400, Andrei Alexandrescu
<[email protected]> said:
There are a bunch of "soft" primitives. Those are meant to put a stop
to the iterator invalidation problems experienced in the STL. The
container implementor may alias softXyz to xyz if she knows the
operation won't mess the ranges currently iterating the container
(which is the case for most node-based containers). I haven't yet
discussed subtler cases in which a range starts with a removed element
etc., but I plan to.
Looks good, but I think something is missing. While I agree with the
idea of having distinguishable "soft" operations, to pass it to other
functions you should be able to make a "soft" shell around your
container and pass that shell mapping non-soft functions to soft ones,
ensuring only soft functions can be called. It could look like this:
insertAtRandomPlace(myContainer.soft, element);
Now you know insertAtRandom won't and *can't* invalidate your
iterators/ranges, and you don't need to write a separate
"softInsertAtRandom" that only calls soft functions.
--
Michel Fortin
[email protected]
http://michelf.com/