【问题标题】:How do I declare a static const struct in C++? [closed]如何在 C++ 中声明静态 const 结构? [关闭]
【发布时间】:2017-10-23 13:31:48
【问题描述】:

我有一个LEDControl 类,它使用一种方法设置 LED 的颜色。 许多类使用这个LEDControl 类来传递一些颜色以分配给LED。因此,我想将某处的颜色定义为常量。

我想我会在我的 LEDControl 类中创建一个名为 Color 的结构,因为我真的只需要直接访问成员,而不需要其他任何东西:

struct Color{
    bool r;
    bool g;
    bool b;
};

然后我在 .cpp 中添加了一个#define

#define RED Color{true, false, false};

但这没有用;它没有在任何其他类的范围内声明。

如何在程序的某处存储一组颜色,以便每个使用 LEDControl 的类都可以使用关键字或变量名称,如 RED 和 GREEN?

【问题讨论】:

  • 使用类枚举。
  • 根据经验,#defines 是邪恶的。如果您真的想做某事,请创建const Color red{},但这也不是您真正想要的...
  • 除非包含定义Color 的标头,否则不能使用它。没有可移植的方式使标识符“全局可用”。
  • 想知道为什么反对的选民会这样做......他们似乎没有评论为什么。

标签: c++


【解决方案1】:

提供inline constexprstruct 实例,而不是使用宏:

namespace color
{
    inline constexpr Color red{true, false, false};
    inline constexpr Color green{false, true, false};
    inline constexpr Color blue{false, false, true};
}

您可以在头文件中提供这些,以便可以从包括它在内的任何文件中访问它们。

【讨论】:

  • inline 变量还在吗?以为是 17 年的
  • 我应该在哪里定义结构本身?
  • @Zimano:你想要的任何地方,只要它在 red/green/blue 定义之前并且在那里可见。
  • @sp2danny:是的,inline 在 17 岁。
  • @VittorioRomeo 还有我在单独的标头中定义的命名空间,对吧?
【解决方案2】:

将定义放在标题中。请避免#define
它可能看起来像:

static constexpr Color RED{true, false, false};

【讨论】:

  • 实际上,static 是不必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多