zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    切片 Slice
    表单与v-model
    vue-内置指令
    go单元测试
    go异常处理
    设计模式
    django数据库事务
    go interface衍生的插件化处理
    goroutine
    drf之序列化
  • 原文地址:https://www.cnblogs.com/ijpq/p/15405100.html
Copyright © 2011-2022 走看看