Может ли unary_function STL C ++ (как реализовано в gcc 4.7.x) иметь виртуальную функцию?

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?

0

Решение

unary_function это удобный тип, который добавляет пару typedefs к вашему производному классу. это не полиморфный; если вы пишете код, который упоминает его по имени, отличному от базового класса в определении класса, вы почти наверняка допустили ошибку.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]