0

Color という名前のクラスがあり、いくつかの静的 Color オブジェクトが含まれています。これらの静的 Color オブジェクトの静的ベクトルが必要ですが、使用している C++ のバージョンがリストの初期化をサポートしていないため、ベクトルを初期化する方法がわかりません。この古いバージョンの C++ を使用しなければならないと (悔しさに) 言われました。

ここに私の Color.h ファイルがあります:

#ifndef COLOR_H
#define COLOR_H

#include <vector>

class Color { 
    public:
        Color( float red, float green, float blue, float alpha = 1.0f );

        float r, g, b, a;

        static Color red;
        static Color yellow;
        static Color blue;

        static std::vector<Color> colors;
};

#endif /* COLOR_H */

そして Color.cpp で:

#include "Color.h"

Color::Color( float red, float green, float blue, float alpha ) {
    r = red;
    g = green;
    b = blue;
    a = alpha;
}

Color Color::red(0.85, 0.0, 0.0);
Color Color::yellow(0.93, 0.93, 0.0);
Color Color::blue(0.0, 0.0, 0.93);

std::array<Colors> arr = {Color::red, Color::blue, Color::yellow};

ただし、リストの初期化がサポートされていないため、この最後の行は機能しません。代替手段は何ですか?redyellow、およびblueをに追加するにはどうすればよいcolorsですか?

4

1 に答える 1

0

少しの起動オーバーヘッドを処理できる場合は、初期化を関数に入れます。

std::vector<Color> init_colors() {
    Color arr[] = {Color::red, Color::blue, Color::yellow};
    return std::vector<color>(arr, arr + sizeof(arr)/sizeof(arr[0]));
}

std::vector<Color> colors = init_colors();
于 2013-06-18T19:43:31.590 に答える