函数对象作为模板参数
Function object as template parameter
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
。
按
原样编译代码是因为模板成员仅在实例化时检查其语义正确性。不过,代码的语法格式良好。但是,当您尝试实例化 LessThanPred<T>
的函数调用运算符时,将收到编译器错误。例如,对于我正在使用的clang
版本(3.6.1(,我得到
less-than.cpp:8:18: error: no matching constructor for initialization of 'std::less<int>'
{ return Comp(val, _val); }
^ ~~~~~~~~~
less-than.cpp:17:25: note: in instantiation of member function 'LessThanPred<int, std::less<int> >::operator()' requested here
LessThanPred<int>(2)(1);
尝试将函数用作
LessThanPred<int>(2)(1)
相关文章:
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- Arduino C++在构造函数中用参数声明对象数组
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- C++ 类对象作为函数参数
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 如何编写将展开以定义具有模板参数的对象的宏
- C++类对象 - 遍历基于参数的对象
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- 是否可以获取成员函数模板参数的拥有对象?
- C++多参数对象创建
- 在不创建参数对象的情况下解析constexpr函数
- 推断模板参数对象成员的类型
- 如何解析c++ v8中的参数对象
- 当默认参数对象被销毁时
- 为什么函数不能更改其参数对象的地址/引用值?