LinuxÒÁµéÔ°ÂÛ̳'s Archiver

zealotcat ·¢±íÓÚ 2005-4-6 14:06

¹ØÓÚbindµÄÒ»¸öÓ÷¨ÒÉÎÊ

bindµÄÎĵµÀïÓÐÕâÑùÒ»¸öÀý×Ó:
>>>>
Çë×¢Ò⣬µÚÒ»¸ö²ÎÊý¨D¨D±»°ó¶¨µÄº¯Êý¶ÔÏó¨D¨D²¢²»±»ÇóÖµ£¬¼´Ê¹ËüÊÇÒ»¸öbindÉú³ÉµÄº¯Êý¶ÔÏó»òÕßÒ»¸öռλ·û£¬ËùÒÔÏÂÃæµÄÀý×Ó²¢

²»ÄÜÏñÔ¤ÆÚµÄÄÇÑù¹¤×÷£º

typedef void (*pf)(int);
std::vector v;
std::for_each(v.begin(), v.end(), bind(_1, 5));
¿ÉÒ»¸öÓÃÒԵĸ¨Öúº¯Êý¶ÔÏóapply´ïµ½Ä¿µÄ¡£apply½«ËüµÄµÚÒ»¸ö²ÎÊýµ±×÷Ò»¸öº¯Êý¶ÔÏó£¬È»ºó½«²ÎÊý±íÖÐµÄÆäËü²ÎÊý´«µÝ¸øËü£¬

³öÓÚ·½±ãÆð¼û£¬ÔÚboost/bind/apply.hppÖаüº¬ÁËÒ»¸öapplyµÄʵÏÖ¡£ÏÂÃæÊÇǰһ¸öÀý×ÓÐ޸ĺóµÄ°æ±¾£º

typedef void (*pf)(int);
std::vector v;
std::for_each(v.begin(), v.end(), bind(apply(), _1, 5));
<<<ÕâÀïµÄapplyµ½µ×ÊÇ×÷ʲôÓõÄ?

dearvoid ·¢±íÓÚ 2005-4-6 15:17

¿´Ñù×Ó apply() ÊǸö function object

dearvoid ·¢±íÓÚ 2005-4-6 18:28

bind Ó÷¨Ê¾Àý:
[code]
#include <iostream>
#include <algorithm>
#include <boost/bind.hpp>

using namespace std;

void print_sum(int a, int b)
{
    cout << (a + b) << endl;
}

int main()
{
    int arr[4] = { 11, 22, 33, 44 };

    for_each(arr, arr + 4, boost::bind(print_sum, _1, 100));
}
[/code]

dearvoid ·¢±íÓÚ 2005-4-6 18:30

±àÒë¡¢ÔËÐнá¹û£º[code]
[color=blue][foo@bar tmp] $[/color] gxx foo.cc -I/usr/local/boost_1_32_0/include/boost-1_32/
[color=blue][foo@bar tmp] $[/color] ./a.out
111
122
133
144
[color=blue][foo@bar tmp] $[/color]
[/code]

dearvoid ·¢±íÓÚ 2005-4-6 18:33

µÚÒ»´ÎÓà boost£¬¸Ð¾õ»¹²»´í :)

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.