在名称空间中使用具有相同名称的类?

Ste*_*ven 11 c++ symbols namespaces class

我必须使用DLL提供的API和这样的标头

namespace ALongNameToType {
    class ALongNameToType {
        static void Foo();   
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使用ALongNameToType :: ALongNameToType :: Foo而不必每次都输入ALongNameToType :: ALongNameToType?我尝试使用using namespace ALongNameToType但在Visual Studio中出现了模糊的符号错误.更改命名空间名称或删除它会给我发现链接器错误.

Ste*_*sop 20

我不知道什么是不明确的,但你可以避免与其他Foo函数的所有冲突,如下所示:

namespace ALongNameToType {
    struct ALongNameToType {
        static void Foo();   
    };
}

typedef ALongNameToType::ALongNameToType Shortname;

int main() {
    Shortname::Foo();
}
Run Code Online (Sandbox Code Playgroud)

  • @ 2am:你不必,你可以写`class ALongNameToType {public:static void Foo(); 如果你愿意,那么问题中的代码需要以某种方式修复.我通常使用`struct`来表示没有非公共成员的类型.您应该在任何适用于代码的样式指南中列出使用`struct`的条件.有些人专门为POD类型使用`struct`,或者专门用于定义将编译为C的类型,或者专门用于没有用户定义的构造函数或成员函数的类型,或者只是偶然使用它们认为"简单"的类型; ) (2认同)