【发布时间】:2017-12-17 17:34:05
【问题描述】:
我正在编写一个简单的类来处理我正在制作的一个小应用程序中的颜色。
此类将有 4 个双精度成员变量,并且希望能够通过名称(即:r、g、b 和 a)或索引(0 表示红色,1 表示绿色和等等)。
此外,如果能够使用大括号括起来的初始化列表进行初始化,那就太好了。
但是,我无法找到一种优雅而简洁的编码方式。
这是我最好的尝试,它并不漂亮。它也不处理无效索引。
struct Colour{
double r, g, b, a;
double& operator[](int i){
switch(i){
case 0:
return r;
break;
case 1:
return g;
break;
case 2:
return b;
break;
case 3:
return a;
break;
}
}
/* ... */
};
/* ... */
int main(){
Colour c = {1.0, 2.0, 3.0, 4.0};
std::cout << c.g << std::endl;
c[1] = 10.0;
std::cout << c.g << std::endl;
return 0;
}
虽然这确实有效,但我想知道是否还有更多 (a) 优雅,并且 (b) 执行此操作的高性能(因为此应用程序主要处理像素操作)方式。
非常感谢。
【问题讨论】:
-
优雅是主观的,没有明显的瓶颈。请先测量,再优化。