【问题标题】:Pass an integer instead of a enum type to a function将整数而不是枚举类型传递给函数
【发布时间】:2015-06-19 14:23:36
【问题描述】:

我想知道是否有任何方法可以将整数传递给需要枚举类型的函数。

我需要使用这个函数:void SetValue(enumtypevalue){ variable = value},它是由同事制作的,枚举类似于:

typedef enum
{
   Obj1 = 0,
   Obj2 = 1,
   ...
   Objn = m,
}enumtype;

问题是这个函数在我在程序中使用的库中,我知道枚举的编号但不知道名称(Obj1,Obj2 ...)所以我想知道它是否可以做类似的事情SetValue(4) 而不是 SetValue(Obj1)所以我的伙伴不必重写/更改它,我也不必对所有枚举进行硬编码(这不小)。

我知道假装传递一种类型而不是另一种听起来很愚蠢,但如果你将“Obj1”传递给函数,就像说“0”一样,因为它们是相关的,所以这就是我提出这个“傻瓜”问题的原因。

谢谢。

【问题讨论】:

  • 你的意思是enum而不是结构吗?
  • 是的,对不起,太失败了。我已经编辑了谢谢
  • 不要做 typedef enum {...} enumName。这不是 typedef 的用途。
  • 我的想法是不必改变我伙伴的工作,但谢谢。我仍然不知道为什么有人投票反对我的问题,但 nvm。

标签: c++ enums


【解决方案1】:

您可以使用 static_cast 将整数转换为枚举类型,例如

SetValue(static_cast<enumtype>(4));

不过,这是不可维护的最后手段。枚举的部分意义在于拥有比裸整数常量更有意义的东西。使用它们是一件好事的另一个原因是因为整数常量可能由于某种原因需要更改,然后很难找到调用函数的代码中使用常量的所有位置并相应地更改它们。

你不能通过从某个地方#include-ing 一个头文件来访问枚举类型吗?

【讨论】:

  • 您好,谢谢!我不知道你也在那里使用 statc 演员(我从没想过 static_cast 不知道为什么 O.o)顺便说一句......我真的不会像你提到的那样写数字。它的东西更复杂,所以如果数字改变,这不会受到影响:) 谢谢你的回答!
猜你喜欢
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多