是否有可能在C中实现temeplatization,因为它可能在C++中
我想在C中编写一个函数,它将接受任何类型的数据类型,如int,char,float或任何其他数据类型,并对他们。因为这在C++中是可行的,在C中可能吗?是否有可能在C中实现temeplatization,因为它可能在C++中
您可以创建并接受union
,也可以使用通用的void*
指向数据。但是C不支持C++中的模板。
我有一个疑问,要使用调用函数内部的值,我们必须知道从调用函数传递的值的数据类型,因为我们不能使用void指针而不用将其转换为正确的数据类型。所以这不是完整的模板。如果有什么不对,请原谅我。 – Prak
关于你可以在C中做的唯一事情是宏,模板的可怜表兄弟。例如:
#define max(a, b) ((a) < (b) ? (b) : (a))
注意,这有一个巨大的问题...宏参数进行评估不止一次。例如:
max(i+=1, i);
扩展为:
((i+=1) < (i) ? (i+=1) : (i));
那表情的结果可能是各种对各种编译有趣的事情。
因此,宏是模板的真正不好的替代品。你可以使用与他们不可知的类型的'函数'。但他们带来了一些障碍和陷阱,使他们几乎没有任何真正重要的用处。它们也相当“毛茸茸”,让你的代码比模板更难理解。
我刚刚给出的max
例子可能看起来并不那么毛茸茸(尽管对参数的加倍评价肯定是令人惊讶且难以处理的东西),但here is an example of declaring something like a templated vector type with macros, and it is obviously hairy。
您可以使用...
与varargs
功能
我猜它必须是一个空指针
void *p;
只是强制转换和使用它。你问就是为什么在C++
介绍阅读您的评论我想在您需要的参数发送可变
func(void *p, int) \\ second argument must be a datatype use sizeof to find the datatype
无效的数据类型Ç多数民众赞成的限制*?..... ............. –