标签: enum-class

枚举类C++ 11的引用或值

我基本上有两个问题可能是相关的,所以我将它们合二为一.

我们应该在传递给函数时通过引用或值传递C++ 11中的枚举类.它继承了原始类型,但它是通过的整个对象吗?因为枚举类是安全的;

enum class MyEnumClass : unsigned short {
    Flag1 = 0,
    Flag2 = 1,
    Flag3 = 2,
    Flag4 = 4,
};
Run Code Online (Sandbox Code Playgroud)

现在让我们说我们有功能sig

const char* findVal(const MyEnumClass& enumClass);
                                     ^
    should this be by const ref?   __|
Run Code Online (Sandbox Code Playgroud)

我的另一个问题是 -

SHOULD IT BE BY MOVE like (MyEnumClass&&) - I am still learning/understanding 
move semantics and rvalue so I am not sure if move semantics are only for 
constructors or can be for member or static funcs -
Run Code Online (Sandbox Code Playgroud)

c++ move-semantics c++11 enum-class

9
推荐指数
2
解决办法
3540
查看次数

强类型C++ 0x枚举比较

为什么不是强类型C++ 0x枚举的实例可以相互比较?


更新:它们在gcc 4.6中具有可比性; 我不确定它是否适用于gcc 4.4.

c++ enums c++11 enum-class

8
推荐指数
1
解决办法
2691
查看次数

validate integer是一些枚举类项(C++ 11)

我有一些枚举课

enum class Foo { A=1, B=18 , Z=42 };
Run Code Online (Sandbox Code Playgroud)

我想检查是否可以将某个整数转换为a Foo.这样做的理想方式是什么?这是用于运行时检查(在编译时尚不知道整数)

显然我可以用这种方式做到这一点(编写一个bool CheckEnum(Foo);带有大屁股开关的函数,除了默认情况下,所有情况都返回true),但我希望有一个更优雅的机制,避免这么多的写作.MPL或Boost.Preprocessor将是一个完全可以接受的解决方案,但其中一个我遗憾地知道很少

c++ c++11 enum-class

8
推荐指数
1
解决办法
3046
查看次数

c ++中的类型字符串的枚举类

- 背景资料:

C++ 11中有一个类称为枚举类,您可以在其中存储变量.但是,我只看到类的类型为char:

enum class : char {
   v1 = 'x', v2 = 'y'
};
Run Code Online (Sandbox Code Playgroud)

- 题:

有什么方法可以表达这个类型字符串的枚举类吗?

例如,

enum class : string{
  v1 = "x", v2 = "y"
};
Run Code Online (Sandbox Code Playgroud)

- 我的想法:

我尝试使用它,但是我遇到了错误,我不确定我是否做得对.我想使用字符串的原因是它们能够同时保存多个字符,因此它对我的代码更有用.

c++ c++11 enum-class

8
推荐指数
2
解决办法
2万
查看次数

在 C++ 中静态区分枚举和枚举类?

我有一个事件处理程序类,它使用模板参数来设置事件类型。我想将这些事件类型强制为一字节大小的枚举类。针对大小的静态断言不是问题,但我无法在网上找到有关如何静态区分enumenum class 的信息

我现在的解决方案是使用C++ 前端实现语法扩展来断言枚举,然后断言正确的大小。在大多数平台上这是有效的,因为枚举使用int类型(通常大于一个字节)。

但这会导致稍微误导性的错误消息。我喜欢彻底。

我可以做哪些检查来传递类枚举,但会因常规的旧枚举而失败?


我不能使用type_traits,因为我使用的编译器(avr-gcc)不支持它。然而type_traits,当需要增加时,我会不断实施我自己的。因此,有关解决方案的任何提示type_traits仍然有用!


最小的例子:

// Event types
enum class tPass     : uint8_t  {}; 
enum class tFailSize : uint16_t {}; // Fail on size!
enum       tFailType            {}; // Currently fails on size, would like to fail on type!

// Event handler
template <typename TEvent>
class tEventHandler 
{
    static_assert(__is_enum(TEvent),   "Must be class enum!"); // Doesn't really check for CLASS …
Run Code Online (Sandbox Code Playgroud)

c++ enums enumeration static-assert enum-class

8
推荐指数
1
解决办法
201
查看次数

使用带有std :: bitset的枚举类

首先,我想要一个普通的枚举而不是基于位的枚举,因为不同枚举的数量将超出任何整数类型.我也想利用C++ 11的类型安全性enum class.要做到这一点,自然的选择是std::bitset,但我不知道如何将这两者结合在一起.

需要定制bitset吗?如何绕过这样一个类的实现?

c++ c++11 enum-class std-bitset

7
推荐指数
1
解决办法
4839
查看次数

在switch case中混合枚举类和unsigned int的C++ 11将无法编译

为什么这段代码不能编译,我该怎么做才能编译?

#include <iostream>
using namespace std;

enum class myEnum : unsigned int
{
    bar = 3
};

int main() {
    // your code goes here

    unsigned int v  = 2;
    switch(v)
    {
        case 2:
        break;

        case myEnum::bar:
        break;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ideone:

https://ideone.com/jTnVGq

prog.cpp: In function 'int main()':
prog.cpp:18:16: error: could not convert 'bar' from 'myEnum' to 'unsigned int'
   case myEnum::bar:
Run Code Online (Sandbox Code Playgroud)

未能在GCC和Clang中建立,在MSVC 2013中有效.

c++ c++11 enum-class

7
推荐指数
2
解决办法
5851
查看次数

如何在Codelite中启用C++ 11功能

下面的代码在Xcode 5和Visual Studio 2013中编译和运行.我有兴趣尝试Codelite,但Codelite不会编译以下程序(因为我在我的项目中使用作用域枚举,所以是一个问题).据我所知,Codelite使用与Xcode相同的编译器.

代码对每个C++ 11有效吗?为什么Codelite无法编译它?

#include <iostream>

namespace abc
{
    namespace xyz
    {
        enum class SampleEnum
        {
            SomeValue = 0,
            SomeOtherValue = 1
        };
    }
}

int main(int argc, char **argv)
{
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是Codelite的构建输出.如果它是乱码,它指向变量实例化中的单词"SampleEnum"并说"期望一个类或命名空间".

/bin/sh -c 'make -j8 -e -f  Makefile'
----------Building project:[ ClangTest - Debug ]----------
codelite-cc /usr/bin/clang++   -c  "/Users/xxx/Desktop/Test/ClangTest/main.cpp" -g -O0 -Wall  -o ./Debug/main.cpp.o -I. -I.
/Users/xxx/Desktop/Test/ClangTest/main.cpp:7:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
                enum class SampleEnum
                     ^
/Users/xxx/Desktop/Test/ClangTest/main.cpp:17:40: error: …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 enum-class codelite

7
推荐指数
1
解决办法
9317
查看次数

如何在 C++ 中双向循环迭代 4 个枚举类值?

我有:

enum class orientation {
  North,
  East,
  South,
  West
};
Run Code Online (Sandbox Code Playgroud)

我想向左(北 => 西)和向右(西 => 北)旋转它的实例。
但我不想将它们转换为数字,因为它会损害可读性和意图,而且从最后一个数字跳到第一个再跳回很奇怪。

我想出了很多解决方案,但都有些蹩脚:(

c++ iteration enum-class c++17 c++20

7
推荐指数
1
解决办法
214
查看次数

您可以在枚举类中使用按位运算符而不进行强制转换吗?

int我喜欢使用枚举类,但有时我将它们用作标志,如果我想使用按位运算符,我必须不断地进行转换。有没有办法在不铸造的情况下做到这一点?我认为您无法为它们定义运算符?

如果我有采用枚举类的函数,我必须这样做吗?

enum class Flags { FLAG1, FLAG2, FLAG3};

void setFlags(Flags flags){}

int main()
{
      setFlags((Flags)((int)Flags::FLAG1 | (int)Flags::FLAG2 | (int)Flags::FLAG3));
}
Run Code Online (Sandbox Code Playgroud)

c++ enum-class

7
推荐指数
1
解决办法
3226
查看次数