gpt4 book ai didi

c - 制作一个接受C中任何类型的动态数组

转载 作者:太空狗 更新时间:2023-10-29 16:28:35 24 4
gpt4 key购买 nike

我正在尝试找到一种方法来制作一个结构来保存一个可以处理任何数据类型(包括用户定义的数据类型)的动态数组,到目前为止,这就是我想出的方法。

#define Vector(DATATYPE) struct {   DATATYPE* data; size_t size; size_t used; }

typedef Vector(int) int_Vector;

int main(int argc, char* argv[]){
int_Vector vec;
return 0;
}

虽然这很有效,但我想知道,这是好的做法吗?我应该做这样的事情还是有更好的方法?还有一种方法可以在没有 typedef Vector(int) int_vector 部分的情况下实现这一点。基本上是一种使我能够像 c++ 使用模板一样使用数组的方法,它看起来像这样:

#define Vector(DATATYPE) struct {   DATATYPE* data; size_t size; size_t used; }

int main(int argc, char* argv[]){
Vector(int) vec;
return 0;
}

主要是为了避免使用太多的 typedef 并将其全部放在同一个名称下。

最佳答案

不,C 没有模板系统,所以你不能使用它。

您可以像您一样使用宏来模拟效果(非常聪明的解决方案),但这当然有点不标准,需要您的代码用户了解宏及其局限性。

通常 C 代码不会尝试,因为它太笨拙了。

最“通用”的典型 vector 类似于 glib 的 GArray。 ,但这并不假装知道每个元素的类型。相反,这留给用户在访问时关心,数组只是将每个元素建模为 n 字节。

C11 中的 _Generic() 可能会有点帮助,老实说我在这方面不是很有经验。

关于c - 制作一个接受C中任何类型的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42293192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com