我在两个不同的文件中使用相同的命名空间。 在那些文件中,我有2枚枚举。 我需要在这些枚举中使用相同的标识符。 有办法吗?
在第一个文件中 first.h
...
namespace foo
{
enum direction
{
NONE,
RIGHT
...
}
}
In second file
second.h
...
namespace foo
{
enum reverse
{
NONE,
LEFT,
...
}
}
这是一个示例代码。 我需要重用“NONE”。 我需要visual studio 2008的代码。 (不能使用:枚举类)
答案 0 :(得分:5)
如果你可以使用C ++ 11,那么实现你想要的最好方法是使用“强类型枚举”,使用enum class
关键字声明,即
enum class direction
{
NONE,
LEFT
};
enum class reverse
{
NONE,
RIGHT
};
在其余代码中,您可以将枚举数称为ns::direction::NONE
和ns::reverse::NONE
(如果您熟悉该语言,则与C#一样)。
如果您没有可用的C ++ 11,那么您可以通过在内部命名空间中声明匿名枚举来模拟相同的事情,例如
namespace direction {
enum {
NONE,
LEFT
};
}
namespace reverse {
enum {
NONE,
RIGHT
};
}
然后,您再次引用direction::NONE
和reverse::NONE
,这样就没有冲突。
答案 1 :(得分:1)
您可以使用
direction::NONE
和
reverse::NONE
区分枚举数,前提是枚举是在不同的范围内定义的。否则,编译器将发出重新定义枚举数的错误。
这是一个例子
#include <iostream>
enum A { NONE };
namespace N1
{
enum B { NONE = 1 };
}
int main()
{
enum C { NONE = 2 };
std::cout << A::NONE << '\t' << N1::NONE << '\t' << NONE << std::endl;
return 0;
}
输出
0 1 2
答案 2 :(得分:1)
#include <iostream>
#include "first.h"
namespace second
{
#include "second.h"
}
using namespace std;
int main()
{
cout << foo::NONE << " " << second::foo::NONE << endl;
return 0;
}
答案 3 :(得分:0)
不,您不能将值从一个枚举重用到另一个枚举。
这可能不是正确的解决方案,但您可以使用显式枚举值,例如:
enum ...
{
NONE = 0,
...
};
或依赖于从0开始的编译器,并为每个枚举计数一个(假设没有赋值)。
然而,它们仍然不是相同的枚举类型,我认为你应该考虑另一种解决方案。从你的问题中你并不完全清楚你实际上想要实现什么,但听起来你正试图制造一个反向控制&#34;,左边变成右边和右边变成左边等等。我建议使用getter函数执行类似这样的操作:
direction GetDirection()
{
if (reverse)
{
switch(curDirection)
{
case LEFT:
return RIGHT;
case RIGHT:
return LEFT;
... deal with other directions that need reversing ...
}
}
return curDirection;
}
另一种选择是实现两个类,其中一个执行&#34;反向开关&#34;,另一个只返回当前方向而不反转。