【发布时间】:2013-08-08 20:04:08
【问题描述】:
我正在重新开始使用 C,但我已经被其他语言的泛型宠坏了。我在可调整大小数组的实现中使用了以下代码:
typdef struct {
void** array;
int length;
int capacity;
size_t type_size;
} Vector;
void vector_add(Vector* v, void* entry) {
// ... code for adding to the array and resizing
}
int main() {
Vector* vector = vector_create(5, sizeof(int));
vector_add(vector, 4); // This is erroneous...
// ...
}
为了使这个通用化,我现在无法将整数添加到向量而不将其存储在其他地方的内存中。
有什么方法可以使这项工作(原样,或者可能是更好的泛型方法)?
【问题讨论】:
-
@Jason:AFAIK,C 是类型安全的,除了强制转换和联合。他可以通过邪恶使用宏来实现这一点。
-
@Jason 我已经使用宏完成了它(正如 SLaks 所暗示的那样),但是如果我非常需要它,我宁愿选择使用 C++
-
您的
type_size字段似乎是多余的,因为您只能存储void*大小的数据。您当然可以存储任意固定且一致大小的内存块,而不是存储指针。 -
@BenVoigt 谢谢,我还没有意识到。
-
@SLaks:抱歉,我的评论方式太简洁了。我的意思是使用
void*。