Re: [Boost-users] [Iterators] Change in transform_iterator from1.31 to 1.32?
-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users- bounces@lists.boost.org] On Behalf Of David Abrahams Sent: Tuesday, July 26, 2005 11:01 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] [Iterators] Change in transform_iterator from 1.31 to 1.32?
"Nat Goodspeed"
writes: [Nat] boost::bind() is a runtime expression. I need to write a typedef for const_iterator before we get anywhere near that point. How can I use a type defined on the bind object for the typedef I need?
If the bind documentation doesn't tell you the type of that object (does it?), then officially you can't.
[Nat] This page: http://www.boost.org/libs/bind/bind.html#Interface uses 'unspecified-N' as the type returned by boost::bind().
Unofficially, you could pass the result of the bind expression to a function template that does something illegal on it, like
template <class F> void show_me_the_type(F const& f) { f += "hello"; }
and your compiler will probably show it to you.
[Nat] Heh, a useful trick to remember. I do need a reference, so I'm
using Peter Dimov's suggested bind<R>() syntax. With this construct:
show_me_the_type(boost::bind
Forgive me, but that seems a bit too implementation-dependent to capture in my own code. I do want to be able to migrate forward to Boost 1.33 and beyond... As far as I'm aware, the only documented way to capture an object created by boost::bind() is to use boost::function. I understand your point about the inefficiency of using boost::function in my const_iterator type, but right now I know no better way to express it. Perhaps it would be useful to augment bind.hpp with a companion template that could reliably describe the type of the object produced by a particular call to boost::bind()?
"Nat Goodspeed"
As far as I'm aware, the only documented way to capture an object created by boost::bind() is to use boost::function. I understand your point about the inefficiency of using boost::function in my const_iterator type, but right now I know no better way to express it.
Of course, you could always use your own data member accessor function object whose type is more reliable. You could even avoid another indirection by making the member pointer a template parameter,
Perhaps it would be useful to augment bind.hpp with a companion template that could reliably describe the type of the object produced by a particular call to boost::bind()?
Not a bad idea. Of course, the Boost typeof library has been accepted and would do this for you quite nicely given the right registrations in the bind library, but it's not in the CVS yet :) -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
David Abrahams
-
Nat Goodspeed