$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Dirk Gerrits (dirk_at_[hidden])
Date: 2003-01-08 12:10:24
Hi Ulrich,
I like the general idea of your bidi_ptr. I haven't really read your
implementation yet, but your description sounds promising.
I don't really like the name bidi_ptr though. Bidirectional is always
spelled out in the Standard library. But bidirectional_ptr is rather
long. How about paired_ptr?
> - using assignment for connecting peers warps the 'normal' modus operandi of
> assignment, should I rather us an auxillary function ?
I think a member function or a free function called connect would be
clearer.
I'd prefer the free function because I think the fact that connect(a,b)
does the same as connect(b,a) is more natural than the fact that
a.connect(b) does the same as b.connect(a). But that may just be me. ;)
> - usually, I would make bidi_ptr<B,A> a friend of bidi_ptr<A,B>, because it
> needs access to its peers internals in order to not work recursively. This
> doesn't work with my compiler if B is the same as A, the compiler complains
> that any class is implicitly its own friend. Therefore all data is currently
> public.
You could add a nested class in the private section of bidi_ptr, say
prevent_friend_to_self. Then you could declare bidi_ptr<B, A> to be a
friend of:
bidi_ptr<A, if_<A==B, prevent_friend_to_self, B>::type >
(That's pseudo-MPL. I don't currently use the MPL well enough to have
memorized the correct syntax to do. It should all be in the docs though.)
It's a bit of a mess, but it should work. Perhaps some clever Booster
will think of a better way. ;)
> - what should operator-> or * do when there is no peer attached ?
Nothing. You could assert that the peer pointer is not null, but don't
do anything about it.
IMHO.
Regards,
Dirk Gerrits