在C中实现类型变量

时间:2016-04-09 01:38:54

标签: c haskell types

我在C中写作并希望有一些类型变量的实现。例如,在Haskell中,我可以编写类似的内容:

data Matrix a = Matrix [a] Int Int

这将让我用任何类型的条目定义矩阵' a'。在C中,我为每种类型编写了一些结构:

struct zMatrix {
  int dim_row;
  int dim_col;
  int *coords;
};

struct rMatrix {
  int dim_row;
  int dim_col;
  float *coords;
};

...

是否有某种方法可以使用通用矩阵结构和某些函数来创建一个指定coords字段类型的矩阵?类似的东西:

struct matrix {
  int dim_row;
  int dim_col;
  (typevar type) *coords;
};

struct matrix matrixCreate(typevar type, int n, int m){...};
struct matrix M = matrixCreate(int, 3, 3);
struct matric M = matrixCreate(float, 3, 3);
...

1 个答案:

答案 0 :(得分:1)

你可以做到。正如@EOF所提到的,您可以对结构的一部分使用联合类型,该部分对于不同的数据类型是不同的。您可能还希望在结构中存储表示类型的内容。您不能像在示例中那样将类型名称传递给函数,但您可以定义表示各种类型的枚举。然后,您将使用switch语句来实现任何特定于类型的代码。使用switch语句的另一种方法是使用描述类型的数据结构(这将包含函数指针和可能的其他信息)。您将为每种类型声明该数据结构的实例,并且您的类型特定代码将使用适当类型的数据结构中的信息来执行它需要执行的操作。类型数据结构可以在一个数组中,您可以使用类型枚举值进行索引,或者您可以使用指向类型数据结构的指针来表示类型。

如果C ++是一个选项,那将使这更容易。