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 };
}