所以,我正在写一些代码,使用动态数组来做一些线性代数的事情,我有一个问题.我需要一些函数来同时对FLOAT_VECTRUCTS和DOUBLE_VECTRUCTS进行操作,这两个 struct 的定义如下:
struct float_vector{
int size_cap;
int current_size;
float *data;
};
struct double_vector{
int size_cap;
int current_size;
double *data;
};
我想要在这两种类型上使用的函数之一是SUM_VECTRUCTS,其定义如下:
int sum_vectors(struct double_vector *vector1, struct double_vector *vector2, struct double_vector *buffer){
// Check if vectors, including buffer, are the same size
if ((vector1->current_size != vector2->current_size)||(vector1->current_size != buffer->current_size)){
fprintf(stderr, "ERROR: Vectors and buffer are not the same size");
return -1;
}
// Main loop and calculations
for (int i = 0; i < vector1->current_size; i++){
buffer->data[i] = vector1->data[i] + vector2->data[i];
}
return 0;
}
有没有什么"好"的办法呢?
先谢谢你.
所以,我想使用_Generic,但我认为它太难调试了,而且会变得非常不可读.
我还想过使用联合,这样我只能有一个"向量" struct ,但我放弃了,因为它不能解决必须编写两个做相同事情的函数的问题.
编辑:
正如一些 comments 者所说,这可能是XY问题的一个例子.因此,我将更好地解释我是如何解决这个问题的:
我正在编写一些代码来用C语言在OpenGL中进行一些渲染,因此,我需要一些方法来存储我想要渲染的三角形顶点的坐标.我已经有很多使用这些动态数组(向量和矩阵)的代码,所以我想重用这些代码.