今天看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
}