通常,模板参数可以是抽象类,如下面的程序所示。但似乎排序中的比较函子一定不是抽象的。至少以下内容不能在 VC++ 11 和 Oracle Studio 12 上编译。
#include <vector>
#include <algorithm>
class Functor
{
public:
virtual bool operator()(int a, int b) const = 0;
};
class MyFunctor: public Functor
{
public:
virtual bool operator()(int a, int b) const { return true; }
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<Functor> fv; // template of abstract class is possible
vector<int> v;
MyFunctor* mf = new MyFunctor();
sort(v.begin(), v.end(), *mf);
Functor* f = new MyFunctor();
// following line does not compile:
// "Cannot have a parameter of the abstract class Functor"
sort(v.begin(), v.end(), *f);
return 0;
}
现在,我想知道这是否是函子参数的一般属性,还是取决于 STL 实现?有没有办法得到,我想做什么?