仿函数仿函数(functor)在各编程语言中的应用

如题所述

在编程世界中,仿函数(functor)是一种强大的工具,它允许我们通过函数对象或回调来替代直接的函数调用。以下是各编程语言中仿函数的使用方法:

在C语言中,函数指针和回调函数是实现仿函数的基础。例如,为了对整数数组进行排序,我们可以定义一个比较函数`compare_ints_function`:

在C语言中,如以下代码所示,通过函数指针实现排序功能:

#include
int compare_ints_function(void*A,void*B) {
return (*((int*)(A))) < (*((int*)(B)));
}

然后在`sort`函数中,通过`cmpfunc`参数传递这个比较函数,对数组进行排序:

void sort(void*first_item,size_t item_size,void*last_item,int(*cmpfunc)(void*,void*)) {
int items[]={4,3,1,2};
sort((void*)(items),sizeof(int),(void*)(items +3), compare_ints_function);
}

C++中,通过类的重载操作符实现函数对象,提供了更为灵活的仿函数应用。比如,`compare_class`类演示了如何通过`operator()`重载实现比较:

C++中,我们可以通过类如`compare_class`来实现,如下所示:

class compare_class {
public:
bool operator()(int A, int B)const {
return A < B;
}
};

然后在`sort_ints`模板函数中,传入一个`ComparisonFunctor`类型的参数:

template
void sort_ints(int* begin_items, int num_items, ComparisonFunctor c);

在C#中,委托(delegate)是实现仿函数的关键,比如在对字符串列表进行排序时:

C#中,使用委托,如以下代码所示:

List list = Arrays.asList("10", "1", "20", "11", "21", "12");
Comparator numStringComparator = new Comparator() {
public int compare(String o1, String o2) {
return Integer.valueOf(o1).compareTo(Integer.valueOf(o2));
}
};
Collections.sort(list, numStringComparator);

总结起来,C、C++和C#虽然实现方式不同,但都通过仿函数实现了将函数作为参数传递,增强了代码的灵活性和可重用性。
温馨提示:内容为网友见解,仅供参考
无其他回答

仿函数仿函数(functor)在各编程语言中的应用
在C语言中,函数指针和回调函数是实现仿函数的基础。例如,为了对整数数组进行排序,我们可以定义一个比较函数`compare_ints_function`:在C语言中,如以下代码所示,通过函数指针实现排序功能:include int compare_ints_function(void*A,void*B) { return (*((int*)(A))) < (*((int*)(B)));...

仿函数的仿函数(functor)在各编程语言中的应用
C语言使用函数指针和回调函数来实现仿函数,例如一个用来排序的函数可以这样使用仿函数#include <stdlib.h>\/* Callback function *\/int compare_ints_function(void*A,void*B){return*((int*)(A))<*((int*)(B));}\/* Declaration of C sorting function *\/void sort(void*first_item,size_t ...

仿函数仿函数(functor)的概念
仿函数,实质上是一种设计模式,它让一个类的行为看起来像一个函数。其核心是通过在类中实现一个operator()函数,使得这个类具有类似函数的操作特性,从而被称为仿函数类。在编程实践中,我们可能遇到这样的情况:某些功能的代码在多个成员函数中频繁使用,但又不适合独立成为单独的函数,因为这可能会引入...

仿函数的仿函数(functor)的概念
写一个公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变量,再说为了复用这么一片代码,就要单立出一个函数,也不是很好维护。这时就可以用仿函数了,写一个简单类,除了那些维护一个类的成员函数外,就只是实现一个operator(),在类实例化时,就将要用的,非参...

C++中STL用法超详细总结(收藏级)
- 仿函数和适配器: 通过函数对象(functor)和适配器(adapter)实现更灵活的函数式编程。2. 功能细节 - 查找与定位: find、lower_bound和upper_bound用于查找元素的位置,search系列函数则用于在序列中查找子序列。- 排序与通用: inplace_merge允许自定义排序,merge和partition根据条件分割数据,random_...

关于c++STL中,使用mem_fun的问题
一个类重载了(),它事实上就是一个仿函数(functor)了。这其实是一个C++语法上的trick,因为C++的泛型是基于代码层面的,所以虽然调用函数和调用一个类的operator ()在本质上是不同的,但是在语法上的写法是一致的,因此就可以破例调用。STL的标准算法是不支持传入一个“成员函数指针”的(因为当没有...

仿函数的介绍
仿函数(functor),就是使一个类的使用看上去像一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。

operate();在VC++里是什么
你可以了解一下什么是仿函数,仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。

c++仿函数问题
sort肯定是可以用的sort有两种版本的调用,其中一个支持"仿函数",partition也可以.另外function object(functor)叫做函数对象, 返回bool的函数对象并且自身状态不会改变的叫做predicate(谓语). algorithm头文件算法中只要最后一个形掺为predicate或者binaryPredicate都可以使用自定义\/预定义的函数对象.

STL六大组件
6、 仿函数 (functor):行为类似函数,就是使一个类的使用看上去象一个函数,具有可配接性。它的具体实现就是通过在类中重载了operator(),使这个类具有了类似函数的行为,就是一个仿函数类了。一般函数指针、回调函数可视为狭义的仿函数。以操作数的个数划分,可分为一元和二元仿函数;以功能划分,可...

相似回答
大家正在搜