如何在另一个命名空间中使用ist c ++来设置一个命名空间的枚举

DrF*_*oid 3 c++ enums namespaces

可能重复:
如何在C++中将枚举导入不同的命名空间?

如何解决以下枚举命名空间问题?

namespace A {
    typedef enum ABar { a, b };

    void foo( ABar xx ) {}
}

namespace B {
    typedef enum A::ABar BBar;

        void foo( BBar xx ) { A::foo( xx ); } 
}

int main() {
    B::foo( B::a ); // 'a' : is not a member of 'B'
                    // 'a' : undeclared identifier
}
Run Code Online (Sandbox Code Playgroud)

Cyg*_*sX1 8

键入一个类型时,不会导入该命名空间中定义的符号.所以你可以写:

int main() {
    B::BBar enumVariable=A::a;
}
Run Code Online (Sandbox Code Playgroud)

您无法访问,B::a因为此符号不存在.

在我看来,部分解决方法是使代码更加干净,尽管编写时间更长,但是将每个枚举打包到自己的结构中,例如:

struct ABar {
    enum Type {a, b};
};

typedef ABar BBar;

int main() {
    ABar::Type var=ABar::a;
    BBar::Type var2=BBar::a;
}
Run Code Online (Sandbox Code Playgroud)

如果您仍然需要它,您将能够将ABar打包到命名空间中,并且通常也会在另一个命名空间中输入typedef.

  • @DrFroid:您是否考虑过命名空间别名?`namespace bdt = boost :: date_time;`,`bdt :: weekdays wd = bdt :: monday;` (2认同)