-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が提案したように、コンストラクタ初期化リストでfloatを初期化しました。

于 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;

覚えておく必要があるのは、これらが整数定数という名前であるということだけです。ここではfloat値は許可されていません。

于 2013-03-10T11:34:59.117 に答える