std::mem_fn和std::mem_fun

std::mem_fnstd::mem_fun(deprecated)
Convert member function to function object,即将成员函数转化为函数对象,这样就可以像普通函数那样使用。

示例一:

#include <iostream>     // std::cout
#include <functional>   // std::mem_fn

struct int_holder {
    int value;
    int triple() { return value * 3; }
};

int main() {
    int_holder five{ 5 };

    // call member directly:
    std::cout << five.triple() << '\n';

    // same as above using a mem_fn:
    auto triple = std::mem_fn(&int_holder::triple);
    std::cout << triple(five) << '\n';
}

示例二:

 template<class T>
 class Fraction {
 public:
     Fraction():Fraction(0,1) {
         std::cout << "Fraction default-ctor called.\n";
     }
     Fraction(T num, T den):numerator_(num), denominator_(den) {
         std::cout << "Fraction ctor called.\n";
     }

     virtual ~Fraction() {
         std::cout << "Fraction dtor called.\n";
     }

     T getNumerator() {
         return numerator_;
     }
     T getDenominator() {
         return denominator_;
     }

     template<class U>
     U calculateValue();

 private:
     T numerator_;
     T denominator_;
 };

 template<class T>
 template<class U>
 U Fraction<T>::calculateValue() {
     return static_cast<U>(numerator_) / static_cast<U>(denominator_);
 }

 auto main()->void {
     Fraction<float> fra1(3.f, 5.f);
     double val1 = fra1.calculateValue<double>();
     std::cout << val1 << std::endl;            // 0.6

     auto memfunc1 = std::mem_fn(&Fraction<float>::calculateValue<double>);
     std::cout << memfunc1(fra1) << std::endl;  // 0.6
 }
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值