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
    }
    
  • 相关阅读:
    数组
    习题
    JAVA 实战练习
    JAVA语言基础——类型转换
    JAVA 语言基础——运算符
    JAVA语法基础——数据类型
    09.22函数,三局两胜
    09.22 猜拳一次
    09.21,函数,累加求和
    09.21,枚举
  • 原文地址:https://www.cnblogs.com/ijpq/p/15405100.html
Copyright © 2011-2022 走看看