问题背景
考虑这样一个场景,我有两个结构体。两个结构体都由三个字段组成。唯一的区别是用于引用这些字段的名称。第一个结构体用于无描述的元组,其组件命名为x、y和z。第二个结构体用于RGB值,其组件命名为red、绿色、这两个结构体都需要定义一个接口,以便执行向量/分量加法和标量乘法等操作。
问题
问题是,仅仅为了改变命名方案而复制和粘贴这两个结构体的相同代码,(X对红色,Y对绿色,z vs. blue)。**理想情况下,可以在接口函数定义中引用结构体的字段(x或红色)而不必命名字段。这可能吗?如果不可能,那么在不改变要求的情况下,我还可以使用哪些其他选项?**我在下面列出了结构体定义,沿着它们与我在这个问题中描述的可能不可能的接口一起使用的一些示例。
难以描述的元组结构
typedef struct
{
/** The first coordinate */
double x;
/** The second coordinate */
double y;
/** The third coordinate */
double z;
} Tuple;
RGB元组结构
typedef struct
{
/** The first coordinate */
double red;
/** The second coordinate */
double green;
/** The third coordinate */
double blue;
} Tuple;
示例用法
Tuple * genericTuple = createVector( 1, 2, 3 ); // create a generic Tuple
printf("%lf", genericTuple->x); // should print 1
Tuple * rgbTuple = createColor( 1, 2, 3 ); // create an rgbTuple
printf("%lf", rgbTuple->red); // should also print 1
1条答案
按热度按时间oalqel3c1#
这里的标准答案是使用联合。
一种可能性是结构的并集: