【发布时间】:2012-09-08 21:53:57
【问题描述】:
假设我有这样的代码:
namespace foo {
enum bar
{
fooBarA,
fooBarB
};
}
struct baz
{
// TODO: map "bar" in this struct to make valid:
bar returnSomething() { return fooBarA; }
};
// and also this:
void doSomething()
{
baz myBaz;
if( baz::fooBarA == myBaz.returnSomething() )
{ /* ... */ }
}
我可以在 TODO 部分放置什么样的代码以使其余部分有效?一些using 或typedef?
PS:为了避免关于“为什么”的问题:命名空间存在于它自己的头文件中,并且可能被几个不同的类使用,这些类应该同意 fooBarA 和 fooBarB 的值,但也隐藏它它们基于foo,因为这与使用baz 的人无关。
PPS:允许使用 C++11。 enum class 有帮助吗?
PPPS:像using declaration with enum? 这样的其他问题处理枚举在类中而不是直接在命名空间中的情况。
【问题讨论】:
-
是的,
foo::bar可以工作——但它不会让我向baz的用户隐瞒bar不是baz的“成员”这一事实。或者换句话说,我希望bar看起来像baz的正式成员。
标签: c++ enums namespaces