Адаптеры указателей на функции (Adaptors for pointers to functions)

Адаптеры указателей на функции (Adaptors for pointers to functions)

Чтобы позволить указателям на (унарные и бинарные) функции работать с функциональными адаптерами, библиотека обеспечивает следующее:

template ‹class Arg, class Result›

class pointer_to_unary_function: public unary_function‹Arg, Result› {

protected:

 Result (*ptr)(Arg);

public:

 pointer_to_unary_function() {}

 pointer_to_unary_function(Result (*x)(Arg)): ptr(x) {}

 Result operator()(Arg x) const {return ptr(x);}

};

template ‹class Arg, class Result›

pointer_to_unary_function‹Arg, Result› ptr_fun(Result (*x)(Arg)) {

 return pointer_to_unary_function‹Arg, Result›(x);

}

template

class pointer_to_binary_function: public binary_function {

protected:

 Result (*ptr)(Arg1, Arg2);

public:

 pointer_to_binary_function() {}

 pointer_to_binary_function(Result (*x)(Arg1, Arg2)): ptr(х) {}

 Result operator()(Arg1 x, Arg2 y) const {return ptr(x, y);}

};

template ‹class Arg1, class Arg2, class Result›

pointer_to_binary_function‹Arg1, Arg2, Result› ptr_fun(Result (*x)(Arg1, Arg2)) {

 return pointer_to_binary_function‹Argl, Arg2, Result›(x);

}

Например, replace_if(v.begin(), v.end(), not1(bind2nd(ptr_fun(strcmp), "C")), "C++") заменяет все "С" на "C++" в последовательности v.

Системы трансляции, которые имеют множественный указатель на типы функций, должны обеспечить дополнительные шаблоны функций ptr_fun.