【发布时间】:2015-04-08 05:03:11
【问题描述】:
是否可以创建一个函数而不是两个具有相同目的但参数类型不同的函数?
我有两个用 C 编写的函数,它们将图像从 RGB 转换为 HSV:
void png_rgb2hsv(pPNG_DATA data);
void jpg_rgb2hsv(pJPEG_DATA data);
他们做同样的事情:他们接受 data->row_pointers 并在循环 data->height 次中循环它。然后它转换 data->row_pointers 引用的值。这就是它的工作原理。但唯一的区别是数据结构使用不同的类型。在我看来,为同一件事使用两个功能是没有意义的。尤其是当我要为更多色彩空间添加更多功能时。
这个程序设计问题在 C 中是如何在实践中解决的?
更新: 大多数读者不明白这个问题。我没有问过超载。这是关于设计的问题。我问是否可以删除冗余功能,“冗余”代码。因为两个函数使用相同的代码,所以做同样的事情,但是函数参数中的类型不同,因为一种类型来自 libjpeg,第二种来自 libpng。我发现这是不可能的,因为这意味着将一个变量用于两种不同的类型。
【问题讨论】:
-
根据你的描述,为什么这里有两种数据类型?如果它们都是像素数据的容器,它们应该是一样的吗?或者有一个相同的“子类型”可以通过?
-
jpeg 和 png 等图像有两个不同的库:libjpeg 和 libpng,它们使用不同的类型。
-
它们有不同的类型,但您可以完全以相同的方式使用它们吗?相同的语法、成员名称等?
-
Void 指针与指向任何对象的指针兼容。您可以使用
void*并添加“类型”参数:void data2hsv(void *data, int datatype) { if (datatype == 0) /* use png */; else /* use jpg */; } -
是的。相同的成员名称。我可以以完全相同的方式使用它们。
标签: c