繁体   English   中英

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

[英]Using a class in a namespace with the same name?

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

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

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

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

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

typedef ALongNameToType::ALongNameToType Shortname;

int main() {
    Shortname::Foo();
}
namespace myns = ALongNameToType;

看来你不能像这样对类范围进行别名:

// second ALongNameToType is a class
namespace myns = ALongNameToType::ALongNameToType;

也许你可以将它自己的功能别名:

namespace foo
{
 class foo
 {
 public:
  static void fun()
  {

  }
 };
}

int main()
{
 void (*myfunc)() = foo::foo::fun;

 myfunc();
}
using ALongNameToType::ALongNameToType::Foo;

如果你只是想把它用作Foo()

有三种使用using 一个用于整个命名空间,一个用于命名空间中的特定事物,一个用于派生类,表示它不想隐藏在基类中声明/定义的内容。 您可以使用其中的第二个:

using ALongNameToType::ALongNameToType

不幸的是,这对你不起作用(由于命名空间和具有相同名称的类的模糊性)。 将这种类型的使用与之前的答案结合起来应该消除歧义:

namespace alntt = ALongNameToType;
using alntt::ALongNameToType;

但是一旦你重命名了命名空间,你真的不需要using语句(只要你每次使用该类时都习惯于编写(缩短的)命名空间:

namespace alntt = ALongNameToType;
alntt::ALongNameToType a;
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM