371
Мысалда берілген
less_health
бульдік функциясы өзіне берілген
monstr
класынаң екі аргументінің
health
өрістерін салыстырады.
health
өрісін тұрақтымен салыстыру үшін онымен функцияның екінші аргументін
байланыстыру керек.
bind2nd
байланыстырғышы бірінші аргумент ретінде
ptr_fun
адаптерінің көмегімен қалыптастырылатын функционалдық
объектіні қабылдауы керек. Программа жұмысының нəтижесі (ауру монстрлар
саны – 2):
MONSTRY:
monstr: ammo = 30 health = 10
monstr: ammo = 10 health = 200
monstr: ammo = 10 health = 1
COUNT_IF: 2
Əдістер адаптерлері
Контейнерлерде мəліметтердің қолданушы анықтаған кластарының
объектілерін сақтау кезінде контейнердің барлық элементтеріне кластың
бір ғана əдісін қолдану мəселесі жиі туындайды. Кітапханада контей-
нер элементтерін қарап шығуға арналған
for_each
алгоритмі бар. Оған
контейнердің əрбір қаралатын элементі үшін шақырылуы тиіс функцияға
нұсқауыш беруге болады, мысалы:
#include
linclude
using namespace std;
void show(int a){ cout << a << endl;}
int main(){
int m[4] = {3, 5, 9, 6};
for_each(m, m + 4, show);
return
0;
}
Егер қарапайым жиымның орнына кез келген бір кластың объекті-
лерінен тұратын контейнерді қолданатын болсақ, онда осыған ұқсас про-
граммада
show
функциясының орнына класс əдісінің шақырылуын жазу
мүмкін болмайды, өйткені əдісті нақты класс объектісін көрсету арқылы
шақыру қажет.
Əдістер адаптерлері кластардың əдістерін стандартты алгоритмдердің
аргументтері ретінде қолдануға мүмкіндік береді. Терістеуіш пен
байланыстырғыш сияқты, əдіс адаптері де функцияны қабылдап,
одан басқа
функция қалыптастырады. Стандартты кітапханада аргументтерінің саны
əртүрлі болып келетін əдістер үшін бірнеше адаптер анықталған: