Boost logo

Boost Users :

From: Chris Ross (cross+boost_at_[hidden])
Date: 2008-06-02 10:06:09


  Forgive me if the answer ends up being strictly C++, rather than
Boost. But, I have a template class that I would rather be able to
deduce it's single [current] template parameter rather than having to
specify it. I'm wondering if boost::function or boost::functional might
make this easier for me to accomplish.

  My functor class is passed to a method similar to std::for_each, and
that template functor class is:

/*! Detach all members of the EntityList via stop_messaging.
 * \todo I suspect there's a way to make this not require template
 * arguments at instantiation, but at the moment it's being used
 * as:
 * mutexed_for_each(detach_all<typeof(arg)>(arg));
 */
template <typename List>
class detach_all {
  public:
    detach_all(const List &e) : list(e) {}
    template <class T>
    void operator ()(T*ent) const
    {
        if (dynamic_cast<Messageable*>(ent)) {
            std::for_each(list.begin(), list.end(),
              stop_messaging(dynamic_cast<Messageable*>(ent)));
        }
    }
  private:
    const List &list;
};

  If I make the class not be a template, but instead make the
constructor a template member, it would be able to determine the
template parameter List from the argument to the constructor. However,
I'm then unable to keep a reference to the List argument to the
constructor, which I need during the operator() invocation.

  Am I missing something about templates that I don't know? Or, is this
just not possible with C++ templates, and in which case, can I use one
of the boost libraries to help?

  Thanks much.

                                  - Chris


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net