【问题标题】:Define type of variable with its own constant values用自己的常量值定义变量的类型
【发布时间】:2021-06-11 11:05:00
【问题描述】:

我想创建一种新类型的变量,它有自己的常量值。所以我想做这样的事情:(这是一个解释这个想法的无效示例)

class Variabletype {
public:
 static const uint8_t Option1 = 0;
 static const uint8_t Option2 = 1;
};

typedef const uint8_t Variabletype;

int main() {
    Variabletype vt = Variabletype::Option1;
    
    if (vt == Variabletype::Option1)
        printf("Option 1\n");
    else
        printf("Option 2\n");
        
    return 0;
}

在将其声明为类后,我无法键入名称Variabletype,但我希望它清楚,我的意图是什么?这个想法的好处是直接找到变量vt 的可能值。我也不想用常量向我的全局空间发送垃圾邮件,而且我不能将vt 设置为不可能的值。

那么这样的事情可能吗?我已经搜索了很多,但没有找到任何解决方案。

【问题讨论】:

  • 您似乎想要一个enum 变量或enum class
  • @AdrianMole 非常感谢,这就是我要找的!所以我有这样的东西: enum class Variabletype {Option1, Option2};
  • 我认为这个问题已经有一个规范的副本。我看了但没有找到,所以我发布了一个答案。

标签: c++ class types typedef


【解决方案1】:

您正在寻找的是enumeration type - 专为您概述的目的而设计。虽然您可以使用简单的“C 风格”enum,但更现代的 C++ 方法是使用所谓的“作用域枚举”;见:Why is enum class preferred over plain enum?

这是使用 enum class 定义的代码的可能实现:

#include <iostream>

enum class Variabletype : uint8_t { // You can specify the underlying type after the ":"
    Option1 = 0, // You can specify any 'actual' values you like ...
    Option2 = 1, // ... but the default uses values of 0, 1, 2 anyway
};

int main()
{
    Variabletype vt = Variabletype::Option1;

    if (vt == Variabletype::Option1)
        std::cout << "Option 1" << std::endl;
    else
        std::cout << "Option 2" << std::endl;

    return 0;
}

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多