Я только что понял это ...
нет использования ctor как:
MyClass(std::unary_function<T,bool> p, std::binary_function<T,E,void> s)
функция std :: unary_function - это просто деквестрация структуры она не содержит operator () и, конечно, не является виртуальным оператором (), поэтому она не используется в качестве аргумента в функции ...
вот как это должно выглядеть:
template <class T, class E,class PredicateFunctionUnaryOperator,class SwapFunctionBinaryOperator>
class MyClass
{
private:
PredicateFunctionUnaryOperator _p;
SwapFunctionBinaryOperator _s;
T _arg1;
E _arg2;
public:
MyClass(PredicateFunctionUnaryOperator p, SwapFunctionBinaryOperator s,T arg1,E arg2): _p(p),_s(s)
{
_arg1 = arg1;
_arg2 = arg2;
}
void f()
{
std::cout<<"Unary Function output is :"<<_p(_arg1)<<endl;;
std::cout<<"Binary Function Output is:"<<_s(_arg1,_arg2);
std::cout<<"Chauoo!!"<<endl;
}
};
но, как я вижу, как он работает, я не могу понять, когда используется специальное синтаксическое шаблонное удаление, связанное с "параметрами шаблона шаблона" ...
Спасибо.