模板特化的一个例子

//   test.cpp
//   xp   +   vc-7_1
//   cl   -EHsc   test.cpp

#include   <iostream>

template <typename   MF>
class   delegate;

template <class   R,   class   T,   class   P>
class   delegate <R   (T::*)(P)>   {
public:
    delegate(T   &   t,   R   (T::*fn)(P),   P   const   &   p)
        :   t_(t),
            fn_(fn),
            p_(p)   {   }

    R   call()   {
        return   (t_.*fn_)(p_);
    }
private:
    T   &   t_;
    R   (T::*fn_)(P);
    P   p_;
};

//   --------

class   test   {
public:
    double   foo(int   x)   {
        return   static_cast <double> (x);  
    }
};

int   main()   {
    delegate <double   (test::*)(int)>   d(test(),   &test::foo,   100);
    std::cout   < <   d.call()   < <   std::endl;
    return   0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值