2017-06-29 120 views
0

所以我有一个名为color的结构我的主要目标是为我的程序创建一个托盘颜色,并通过一个变量而不是RGB值或三个不同的结构变量访问它们。在一个struct C++中存储RGB值

函数声明

WINGDIAPI void APIENTRY glColor3f(GLfloat red,GLfloat green,GLfloat blue); 

struct color 
{ 
    GLfloat r; 
    GLfloat g; 
    GLfloat b; 

}; 
color blue={0.0,0.0,255.0}; 

glColor3f(blue); 

我能够通过blue.r,blue.g,blue.b.访问值 但相反,我希望他们都在一个变量,所以当我想要访问它,我可以调用变量蓝色。

+4

只使用变量blue? – lostbard

+0

给我一个错误“无法将'blue'(类型'main():: color')转换为类型'const unsigned char *' –

+0

您能告诉我们代码尝试使用变量'blue'吗? –

回答

3

只能一个变量不传递给glColor3f()因为该功能具有参数。

这就是说有一个类似的功能glColor3fv()需要三个颜色值的数组。此功能只有单参数,因此您只需将一个参数传递给它。

因此,对于与期望颜色阵列glColor3fv()和类似的功能使用,我们实际上可以声明一个类型是这样的...

using color3f = std::array<GLfloat, 3>; 

......这能这样使用:

color3f blue={0.0,0.0,255.0}; 
glColor3fv(blue.data()); 

data()成员的调用是将std::array转换为指针所必需的。

为什么我不只是声明像using color3f = GLfloat[3]这样的普通数组类型,它不需要调用data()成员?由于普通数组有一些缺点,例如,不能简单地将其分配给另一个,如blue2 = blue;

2

glColor3f不会将您的struct color类型作为参数。所以你不能使用glColor3f(blue)

但是,你可以定义一个重载函数,像这样:

void glColor3f(struct color &c) { 
    glColor3f(c.r, c.g, c.b); 
}