0

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 的使用吗?

4

1 回答 1

2

unary_function是一种方便的类型,它向派生类添加了几个 typedef。它不是多态的;如果您编写的代码在类定义中通过名称提及它而不是作为基类,那么您几乎可以肯定犯了一个错误。

于 2013-03-08T14:01:20.070 回答