模板中使用函数类是否有些不一样的地方?
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;
};
比如这个类的定义里,
return Comp(val , _val);
Comp是一个函数类模板,这里原本是想调用Comp里对()的重载
这必须通过对象来调用,显然这里没有对象
如果把Comp(val, _val)理解成调用constructor建立无名对象,那constructor没有返回值,这里却要求返回bool型。
这到底该怎么理解呢?
[解决办法]
是的,恭喜楼主读书很认真,分析了书上的一个错误。虽然手里没有英文版,不知道是不是只中文版的印刷错误。
应该是return Comp()(val, _val);
另外,essential c++ 是个速读型普及读物,不适合做入门书籍,建议换书《C++ Primer》