相关疑难解决方法(0)

C++预处理器__VA_ARGS__参数个数

简单的问题,我无法在网上找到答案.在可变参数宏中,如何查找参数的数量?如果它有解决方案,我可以使用boost预处理器.

如果它有所不同,我试图转换可变数量的宏参数来增强预处理器序列,列表或数组以进行进一步的重新处理.

c c++ c-preprocessor variadic-macros

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

是否可以确定c ++枚举类的元素数量?

是否有可能确定c ++的基数enum class:

enum class Example { A, B, C, D, E };
Run Code Online (Sandbox Code Playgroud)

sizeof但是,我尝试使用它返回枚举元素的大小.

sizeof(Example); // Returns 4 (on my architecture)
Run Code Online (Sandbox Code Playgroud)

有没有一种获得基数的标准方法(在我的例子中为5)?

c++ cardinality c++11 enum-class

64
推荐指数
7
解决办法
4万
查看次数

您使用C++中的哪种Typesafe枚举?

众所周知,C++中的内置枚举不是类型安全的.我想知道实现类型安全枚举的哪些类在那里使用...我自己使用以下"自行车",但它有点冗长和有限:

typesafeenum.h:

struct TypesafeEnum
{
// Construction:
public:
    TypesafeEnum(): id (next_id++), name("") {}
    TypesafeEnum(const std::string& n): id(next_id++), name(n) {}

// Operations:
public:
    bool operator == (const TypesafeEnum& right) const;
    bool operator != (const TypesafeEnum& right) const;
    bool operator < (const TypesafeEnum& right) const;

    std::string to_string() const { return name; }

// Implementation:
private:
    static int next_id;
    int id;
    std::string name;
};
Run Code Online (Sandbox Code Playgroud)

typesafeenum.cpp:

int TypesafeEnum::next_id = 1;

bool TypesafeEnum::operator== (const TypesafeEnum& right) const 
{ return id == right.id; }

bool TypesafeEnum::operator!= …
Run Code Online (Sandbox Code Playgroud)

enums design-patterns enumeration type-safety c++03

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

枚举C++中的枚举

在C++中,是否可以枚举枚举(运行时或编译时(首选))并为每次迭代调用函数/生成代码?

示例用例:

enum abc
{    
    start
    a,
    b,
    c,
    end
}    
for each (__enum__member__ in abc)
{    
    function_call(__enum__member__);    
}
Run Code Online (Sandbox Code Playgroud)

合理的重复:

c++ enums enumeration metaprogramming

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

可搜索的类似Enum的对象,包含字符串和int转换

介绍

enumC++中的类型是相当基本的; 它基本上只是为标签创建了一堆编译时值(可能具有适当的范围enum class).

将相关的编译时常量分组在一起非常有吸引力:

enum class Animal{
DOG, 
CAT,
COW,
...
};
// ...
Animal myAnimal = Animal::DOG;
Run Code Online (Sandbox Code Playgroud)

然而,它有各种各样的缺点,包括:

  • 没有标准的方法来获得可能的元素数量
  • 没有迭代元素
  • 枚举与字符串没有简单的联系

在这篇文章中,我试图创建一种解决这些缺点的类型.

一个理想的解决方案采用常量的编译时知识及其与字符串的关联的概念,并将它们组合成一个类似于scoped-enum的对象,可以通过enum id和enum string name进行搜索.最后,结果类型将使用尽可能接近枚举语法的语法.

在这篇文章中,我将首先概述其他人为各个部分所尝试的内容,然后介绍两种方法,一种完成上述方法,但由于静态成员的初始化顺序而具有未定义的行为,另一种解决方案不那么漂亮语法但由于初始化顺序没有未定义的行为.


以前的工作

关于获取枚举中的项目数量(1 2 3)以及网上提出的大量其他问题(4 5 6)等,有很多问题.而且普遍的共识是,没有确定 -火的方式做到这一点.

第N个元素技巧

仅当您强制执行枚举值为正且增加时,以下模式才有效:

enum Foo{A=0, B, C, D, FOOCOUNT}; // FOOCOUNT is 4
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试编码某种需要任意值的业务逻辑,则很容易被破坏:

enum Foo{A=-1, B=120, C=42, D=6, FOOCOUNT}; // ????
Run Code Online (Sandbox Code Playgroud)

提升枚举

所以Boost的开发人员试图用Boost.Enum来解决这个问题,Boost.Enum使用了一些相当复杂的宏来扩展到一些至少会给你大小的代码.

可重复的枚举

在迭代枚举中有一些尝试; 可以迭代的类似枚举的对象,理论上允许隐式大小计算,甚至在[7](7 8 9,...)的情况下明确允许

枚举到字符串转换

尝试实现这一点通常会导致自由浮动函数和使用宏来适当地调用它们.(8 …

c++ c++11

25
推荐指数
1
解决办法
1494
查看次数

如何获得枚举数

如何获得枚举数

我有一个Enum

typedef enum{

DEL_TIME_VALUE    = -1,
DEL_TIMESEC_VALUE = 100,
DEL_TIMEMIN_VALUE = 200,
DEL_TIMEHOUR_VALUE = 300,
DEL_DAY_VALUE      = 1000,
DEL_COUNT_VALUE    = 1000,
....
.....
.....
DEL_END             =90002
}WORKINGTIME;
Run Code Online (Sandbox Code Playgroud)

我如何得到枚举计数.

我在下面尝试循环!

for(int i=DEL_TIME_VALUE; i<=DEL_END; i++) {

}
Run Code Online (Sandbox Code Playgroud)

我猜它不好!

任何人都可以告诉我如何获得枚举数!在枚举中声明.

提前致谢!

iphone ipad

14
推荐指数
1
解决办法
9273
查看次数

为什么C++ numeric_limits <enum_type> :: max()== 0?

这里有一些代码可能会起作用:

#include <cassert>
#include <limits>

enum test { A = 1 };

int main()
{
    int max = std::numeric_limits<test>::max();
    assert(max > 0);
}
Run Code Online (Sandbox Code Playgroud)

但它在Linux上的GCC(4.6.2)和clang(2.9)都失败了:枚举类型的max()实际上是零!即使您使用C++ 11枚举类型说明符来明确说明您希望枚举具有哪种类型,这仍然是正确的.

为什么是这样?至于C++ 11的行为,它是否被明确要求?我在N2347中没有提到它,这是关于强类型枚举的论文.

c++ enums numeric-limits c++11 strongly-typed-enum

12
推荐指数
1
解决办法
6060
查看次数

获得工会成员的数量

有没有办法在C++中获得union的成员数量?例如:

union U
{
    int a;
    double b;
    char c;
};

int main()
{
    std::cout << std::union_members_count<U>::value << std::endl;  // prints 3
}
Run Code Online (Sandbox Code Playgroud)

当然,std::union_members_count<>是虚构的.

如果有办法,我该如何实施/使用它?

c++

4
推荐指数
1
解决办法
173
查看次数

枚举中的"常量"数

可能重复:(
如何)我可以计算枚举中的项目?

有没有办法获得枚举中的常量数?
例如:

enum C{id,value};
Run Code Online (Sandbox Code Playgroud)

以后这将返回2:

//pseudo code
get<C>::value 
Run Code Online (Sandbox Code Playgroud)

而且,是否可以通过[] optor访问这些常量?喜欢ie:
C [0]会返回id

c++

2
推荐指数
1
解决办法
442
查看次数