处理函数对象
Dealing with function objects
std::sort
是在Compare类上参数化的模板。函数本身将该类的对象作为参数,并"调用"它来比较要排序的容器的元素。
我认为重要的是,我们可以给sort一个具体的对象,而不是简单地让sort自己构造一个Compare对象。(如果没有,请纠正我。)
现在假设我们想要实现一个函数foo
,它将vector<T>
和T
的比较函数作为输入:
template <class T, class Compare>
bool foo(const vector<T>& v, Compare comp);
作为该实现的一部分,我们希望对包含T
和int
对的不同向量进行排序,即对vector<pair<T, int>>
进行排序。但我们只想根据T
分量对这个向量进行排序。这意味着我们想要将T
上的给定顺序提升为pair<T, int>
上的顺序,并将该顺序传递给std::sort
。
不使用Lambda怎么能做到这一点?我的问题是,我看不到将T
的Compare
对象提升为pair<T, int>
的一个对象的方法。我只能提升Compare
类,然后构造该类的对象,这意味着foo
将完全忽略其comp
参数。
谢谢。
例如,您可以在函数内部定义一个局部结构吗?
template <class T, class Compare>
bool foo(const vector<T>& v, Compare comp)
{
struct NewCompare
{
const Compare &rc;
NewCompare( const Conpare &comp ) : rc( comp ) {}
NewCompare( const NewCompare &comp ) : rc( comp.tc ) {}
bool operator ()( const std::pair<T, int> &p1, const std::pair<T, int> &p2 ) const
{
return rc( p1.first, p2.first );
}
};
//...
}
或者您可以编写一个通用的功能适配器。
相关文章:
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 如何使用指针传递给函数的数组中对象的函数成员
- C++ 类对象作为函数参数
- 使用返回对象的函数处理错误
- 为什么我不能引用指向实例化对象的函数的指针?
- 类中的 Arduino 对象构造函数设置垃圾值
- 引用对象成员函数的成员函数
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- C++,class,一个返回对象的函数
- 编译错误:临时对象构造函数中缺少参数
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- 我们可以在cpp中为对象分配函数吗
- 双指针在使用 new 时不调用对象构造函数
- C++多态性:有没有办法找到对象成员函数的地址?
- 以支持继承的方式将自身shared_ptr添加到对象构造函数中的向量中
- 如何调用其对象位于函数内的类方法
- 在创建对象向量时,不为每个对象唯一调用默认对象构造函数
- 为什么 std::invoke 不处理函数重载
- 处理函数对象
- 在信号处理程序中不允许对象或函数