binder2nd
происходит от unary_function
,
Следующий фрагмент кода не работает:
greater<int> g;
//greater is derived from binary_function
//bind2nd returns binder2nd object and binder2nd is derived from unary_function
const unary_function<int,bool> &greater_than_0 = bind2nd(g, 0);
// base class reference type holding reference to derived class object
remove_if(lst.begin(), lst.end(), greater_than_0);
//does not work
Принимая во внимание, что следующий фрагмент кода работает:
greater<int> g;
const binder2nd< greater<int> > &greater_than_0 = bind2nd(g, 0);
remove_if(lst.begin(), lst.end(), greater_than_0);
Будет ли полезно иметь фиктивную виртуальную функцию в unary_function
так что первый фрагмент кода работает. Может ли это улучшить использование STL?
unary_function
это удобный тип, который добавляет пару typedefs к вашему производному классу. это не полиморфный; если вы пишете код, который упоминает его по имени, отличному от базового класса в определении класса, вы почти наверняка допустили ошибку.
Других решений пока нет …