#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)
{
// do something
}
产生多类型
#define CONCAT_2_EXPAND(A, B) A ## B
#define CONCAT_2(A, B) CONCAT_2_EXPAND(A, B)
#define CONCAT_3_EXPAND(A, B, C) A ## B ## C
#define CONCAT_3(A, B, C) CONCAT_3_EXPAND(A, B, C)
#define Vector_(NAME) CONCAT_3(Num, Vector_, NAME)
#define Vector CONCAT_2(Num, Vector)
#define num float
#define Num Float
struct Vector
{
num *data;
int n;
};
void Vector_(add)(Vector *C, Vector *A, Vector *B)
{
//codes
}
#undef num
#undef Num
#define num double
#define Num Double
struct Vector
{
num *data;
int n;
};
void Vector_(add)(Vector *C, Vector *A, Vector *B)
{
//codes
}
#undef num
#undef Num
消除重复代码
#include "general.h"
#define Vector_(NAME) CONCAT_3(Num, Vector_, NAME)
#define Vector CONCAT_2(Num, Vector)
#define num float
#define Num Float
#include "generic/add.h"
#undef num
#undef Num
#define num double
#define Num Double
#include "generic/add.h"
#undef num
#undef Num
https://zhuanlan.zhihu.com/p/34496542
产生一种类型
产生多类型
消除重复代码