Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问命名空间内的枚举_C++_Enums_Namespaces - Fatal编程技术网

C++ 访问命名空间内的枚举

C++ 访问命名空间内的枚举,c++,enums,namespaces,C++,Enums,Namespaces,我在访问包装在名称空间中的枚举时遇到一些问题 我的问题是,对于一个算法的两个不同实现,我有两个名称空间。问题是,每个名称空间中的模式有两个枚举,每个枚举略有不同。在一个文件中,我想比较这两种实现。问题是,如果没有这两个冲突,我就不能使用枚举。有谁能描述一下我如何不用使用名称空间 namespace implementation1{ enum modes {mode_standard, mode_special, fast_mode} } namespace implementation2{ en

我在访问包装在名称空间中的枚举时遇到一些问题

我的问题是,对于一个算法的两个不同实现,我有两个名称空间。问题是,每个名称空间中的模式有两个枚举,每个枚举略有不同。在一个文件中,我想比较这两种实现。问题是,如果没有这两个冲突,我就不能使用枚举。有谁能描述一下我如何不用
使用名称空间

namespace implementation1{
enum modes {mode_standard, mode_special, fast_mode}
}
namespace implementation2{
enum modes {mode_default, mode_repeat, fast_mode}
}

注意,这只是一个例子,我的有点复杂,但它演示了我想做什么。我想尝试以这种方式解决它,而不是重构为全局枚举或重命名模式,尽管如果没有其他方法,这是一个选项。

我不确定您的问题是什么,但这对您来说可以吗?如果没有,请详细说明示例:

namespace implementation1 {
enum modes { mode_standard, mode_special, fast_mode };
}
namespace implementation2 {
enum modes { mode_default, mode_repeat, fast_mode };
}

int main(int argc, char *argv[]) {
  if (implementation1::fast_mode == implementation2::fast_mode) { // foo mode use...
  }
  return 0;
}
更新
enum
会破坏您的“等价性”:

enum
值是自动分配的,如果需要将
enum
s与他的姓名进行比较,则需要手动记录“分配值”:

namespace implementation1 {
enum modes { mode_standard, mode_special, fast_mode = 3 };
}
namespace implementation2 {
enum modes { first_mode, mode_default, mode_repeat, fast_mode = 3 };
}
但是它很容易出错,我强烈建议不要使用它,如果您需要的话
需要这方面的详细信息我建议您了解新枚举的动机(例如:
enum class
),可从c++11获得。

您尝试过namespace1::mode1吗?它起作用了吗?如果没有,实际结果是什么?一般来说,您访问枚举的方式与访问任何其他名称的方式完全相同。谢谢,我想这就成功了。当我试图解决这个问题时,我误解了这个概念。正如我在评论中提到的,感谢您的帮助(我对名称空间还是很陌生)。我试图确定如何访问枚举本身。然而,我确实有一个问题,如果我在两个不同的名称空间中给两个枚举相同的值,它们是否等效(例如,除了名称空间之外,两者完全相同)
namespace implementation1 {
enum modes { mode_standard, mode_special, fast_mode = 3 };
}
namespace implementation2 {
enum modes { first_mode, mode_default, mode_repeat, fast_mode = 3 };
}