-1

有这个代码:

#define GREEN 0.0f, 1.0f, 0.0f
#define RED   1.0f, 0.0f, 0.0f

const float colors[] = {
    RED, GREEN, RED, RED,
};

如果不使用#define. 这是更好的方法吗?此外,考虑到 C++11 标准。

更新:使用这种定义的完整代码示例,https://bitbucket.org/alfonse/gltut/src/3ee6f3dd04a76a1628201d2543a85e444bae8d25/Tut%2005%20Objects%20in%20Depth/OverlapNoDepth.cpp?at=default

4

3 回答 3

3

我不确定你要做什么,但要创建一个颜色列表,我会这样做:

#include <vector>

class color {
public:
  color(float r, float g, float b)
    : m_red(r), m_green(b), m_blue(b) { }

  float m_red;
  float m_green;
  float m_blue;
};

const auto red   = color(1.0f, 0.0f, 0.0f);
const auto green = color(0.0f, 1.0f, 0.0f);
const auto blue  = color(0.0f, 0.0f, 1.0f);

int main {

  auto colors = std::vector<color>();
  colors.push_back(red);
  colors.push_back(green);
  colors.push_back(blue);
  colors.push_back(red);
  ...
}

编辑 正如 juanchopanza 建议的那样,我在构造函数初始化列表中初始化了浮点数。

于 2013-03-10T11:28:27.277 回答
3

正如 Elasticboy 建议的那样,做这样的事情:

struct Color {
   float R;
   float G;
   float B;
};

现在,创建常量:

const Color Red = {1.0f, 0.0f, 0.0f };
const Color Green = {0.0f, 1.0f, 0.0f };

等等...

于 2013-03-10T11:29:22.017 回答
0

你可以enum在这里使用。例如

typedef enum color
{
    RED, GREEN, BLUE
} color;

或者,您也可以为颜色分配默认值。例如

typedef enum color
{
    RED=1, GREEN=5, BLUE=7
} color;

您唯一需要记住的是这些被命名为整数常量。此处不允许使用浮点值。

于 2013-03-10T11:34:59.117 回答