とりあえず Boost.Function で

id:melpon:20071208 でこんな関数を書いた。

template<class TObject>
boost::_bi::bind_t<
    void,
    void (*)(TObject*, boost::function<void (TObject*)>),
    boost::_bi::list2<
        boost::arg<1>,
        boost::_bi::value<
            boost::function<void (TObject*)> > > >
null_check_deleter(boost::function<void (TObject*)> f)
{
    return boost::bind(_null_check_deleter<TObject>, _1, f);
}

boost::bind の戻り値が訳の分からないことになってるんだけど、よく考えてみると Boost.Bind とか Boost.Lambda とか、そんなのを格納したかったらとりあえず Boost.Function に入れておけばいいんだった。

template<class TObject>
boost::function<void (TObject*)>
null_check_deleter(boost::function<void (TObject*)> f)
{
    return boost::bind(_null_check_deleter<TObject>, _1, f);
}

Boost.Bind と Boost.Lambda の戻り値は Boost.Function と覚えておこうっと。