function object研究之十四 unwrap

template<class F> struct unwrapper
{
    static inline F & unwrap( F & f, long )
    {
        return f;
    }

    template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )
    {
        return rf.get();
    }

    template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )
    {
        return _mfi::dm<R, T>( pm );
    }
};

这个模板里面的第二个unwrap静态成员函数可以将reference_wrapper<T> 里面的引用拿出来。

第三个解释起来有点笔墨,先放一放,以后这里补上。

其他情况下使用第一个,直接返回f参数。

你可能感兴趣的:(function object研究之十四 unwrap)