[学习]函数指针和模板混用实现forall

引言

在写对一些特殊数据结构,例如树、广义表等数据结构需要进行遍历。因此需要实现一个类似于forall的函数来进行这样的遍历,例如在树中这样的函数称为Traverse。然而在遍历过程中我们可能要定义相关的接口供调用,这样就要引入函数指针。

基本代码

#include <stdio.h>

int arr[] = { 0,1,2,3,4,5,6,7,8,9 };
template <class T>
int forall(T* any_list,size_t list_len,void (*function)(T&));

void print_decmical(int i)
{
	printf("%d,", i);
	return NULL;
}
int main(int argc, char** argv)
{
	forall(arr, 10,print_decmical);
	return 0;
}
template <class T>
int forall(T* any_list, size_t list_len, void (*function)(T&))
{
	for (size_t i = 0; i < list_len; i++)
	{
		function(*any_list);
		any_list++;
	}
	return 0;
}

下面对这个代码进行有限的解释

  1. 模板

    template<class T>
    

    T代替了所有的class类型,利用模板生成多个函数实例,因此可以减少代码量。

  2. 函数指针

    //...
    ... void (*function)(T)
    //...
    

    指示了此处的参数是一个接受一个参数,也就是遍历过程中产生的变量。由于只是对参数进行操作,因此只需要对引用进行读写即可,不需要返回值,因而设计为void返回类型。

posted @ 2021-10-15 00:11  二氢茉莉酮酸甲酯  阅读(47)  评论(0编辑  收藏  举报