C的泛型实现

今天看pytorch源码,看到一些之前和DALI源码相似的操作,我发现这些代码都使用C来实现范型,而不使用C++.真的很神奇!难道嫌模板编译不够快????

假如我们写了一个整数add的函数如下

struct NumVector
{
 num *data;
 int n;
}

// C = A + B
void NumVector_add(NumVector *C, NumVector *A, NumVector *B)
{
// check size
 if(!((C->n == A->n) && (C->n == B->n)))
 {
     exit(1); // 稍后再说产生异常的问题,先这么退出
 }

 int i,j, n;
 n = C->n;
 for(i=0; i<n; i++)
 {
     C->data[i] = A->data[i] + B->data[i];
 }
}

现在考虑如何将类似于NumVector_add的形式特例化为FloatVector_add等类型名称

#define Vector_(NAME) Num ## Vector_ ## NAME
#define Vector Num ## Vector

#define num float
#define Num Float

struct Vector
{
 num *data;
 int n;
};

void Vector_(add)(Vector *C, Vector *A, Vector *B)
{
//codes
}
posted @ 2021-10-14 08:49  ijpq  阅读(106)  评论(0编辑  收藏  举报