在Microsoft Visual C ++ 2008中使用静态对象初始化静态向量?

时间:2013-06-18 18:51:11

标签: c++ visual-studio visual-c++ visual-studio-2008

我有一个名为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};

但是,最后一行不起作用,因为不支持列表初始化。有什么选择?如何将redyellowblue添加到colors

1 个答案:

答案 0 :(得分: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();