【问题标题】:Initializing a static vector with static objects in Microsoft Visual C++ 2008?在 Microsoft Visual C++ 2008 中使用静态对象初始化静态向量?
【发布时间】:2013-06-15 02:58:39
【问题描述】:

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

【问题讨论】:

  • Initializer list 是 C++11 的一部分,VS2008/VS2010 不支持。不过,我认为它在最新版本的 VS 2012 中。尝试使用 std::vector 并在其上使用 push_back()。
  • 我知道初始化列表不受支持,我无法升级我的 VS 版本。我在问初始化列表的替代方法是什么。
  • 你试过包括尺寸吗? IE。 std::array&lt;Colors, 3&gt; arr = {Color::red, Color::blue, Color::yellow};我没有VS2008所以不能自己编译..
  • 我不想包括尺寸,因为在我的实际代码中,我列出了很多项目。

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


【解决方案1】:

如果您可以处理一些启动开销,请将您的初始化放在一个函数中:

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();

【讨论】:

    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 2011-04-11
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多