Boost logo

Boost :

From: Douglas Gregor (gregod_at_[hidden])
Date: 2001-10-07 15:44:02


On Sunday 07 October 2001 11:05, you wrote:
> I have encountered a situation where I have a boost::function:
>
> boost::function<void> onClick;
>
> initialized to a function object with a known type F (which is similar to a
> std::vector<boost::function<void> > with a broadcasting operator().)
>
> At some later point I need to ask onClick "do you contain an instance of F?
> if yes, please give me a reference to it so I can add another handler."

With the current interface, this isn't possible, but I think it would be a
worthwhile addition. I suggest the following interface (modeled after
boost::any)

template<typename R, typename T1, ..., typename TN>
class function {
public:
  // type of target function object, or typeid(void) if empty
  const std::type_info& type() const;
};

//
template<typename To, typename R, typename T1, ..., typename TN>
To& function_cast(function<R, T1, ..., TN>& f);

template<typename To, typename R, typename T1, ..., typename TN>
const To& function_cast(const function<R, T1, ..., TN>& f);

> Ideas?

I would think that onClick shouldn't be a boost::function<void>, but a
full-fledged signal. Unfortunately, we don't have one of those in Boost yet.

> BTW, the function documentation mentions 'operator bool' which has been
> replaced by 'operator safe_bool.'

It's an intentional trade-off. On one hand, the function documentation
out-and-out lies to the user about a conversion. On the other hand, the user
doesn't need to go look up what safe_bool is in the (nonexistant)
documentation.

safe_bool should go into utility.hpp, and then it would have documentation so
this problem would be avoided. I promised to do that but haven't yet
delivered :(.

> Also, operator! is not necessary.

It's a workaround. At least one compiler (Borland, perhaps?) doesn't find the
appropriate conversion sequence without an explicit operator!.

        Doug


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk