C语言的泛型编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的泛型编程相关的知识,希望对你有一定的参考价值。

1 问题引入

  首先引入一个问题,实现一个泛型的swap函数,分别使用C++和C实现。

2 C++的泛型

  C++有良好的泛型编程机制,所以我很快就写出了C++版的泛型swap函数。

template<typename T>
void MySwap(T &a, T &b)
{
	T c = a;
	a = b;
	b = c;
}

3 C语言的泛型

  我的第一想法是既然不能直接交换变量(类型不知道),那就交换指针呀。下一瞬间,我就很想给自己一巴掌!是左值吗你就交换指针?Stupid!

  那就多传入一个参数喽,把大小传进去吧,然后我们直接根据大小来交换内存好了。好想法:

void MySwapC(void* a, void *b, int size)
{
	void *p = (void*)malloc(size);
	assert(p != NULL);

	memcpy(p, a, size);
	memcpy(a, b, size);
	memcpy(b, p, size);
}

4 总结

  运用一定的技巧,C语言也可以实现一定功能的泛型编程,但编程的时候一定要多加小心,C语言的泛型编程并不完善,并没有足够的类型检查,所以很容易出错。

以上是关于C语言的泛型编程的主要内容,如果未能解决你的问题,请参考以下文章

语言中的泛型

泛型的泛型的好处

OC的泛型使用介绍

Kotlin 中的泛型

什么意思 在HashMap之前 ? Java中的泛型[重复]

C 中的泛型编程 - void*- const 正确性