template <typename elemType, typename Comp = less<elemType> >
class LessThanPred {
public:
LessThanPred(const elemType &val) : _val(val){}
bool operator()(const elemType &val) const
{ return Comp(val, _val); }
void val(const elemType &newval) { _val = newval; }
elemType val() const { return _val; }
private:
elemType _val;};
这是Essential C++的一个例子。 Comp
显然是一个函数对象类的名字。为什么我可以直接使用Comp(val, _val)
?通常我想我应该先定义一个这样的函数对象:Comp comp
,然后调用comp
而不是Comp
。功能对象作为模板参数
比较时,一个类型参数,而不是一个函数对象类名称。顺便说一句,你实际上可以定义一个Comp Comp对象,然后调用comp。 – user2296177
您是否实例化/使用'LessThanPred'的函数调用操作符?由于它是模板成员,因此只有在实例化时才能正确检查。 –
由于引用不正确,我正在投票结束此题,因为引用不正确 –