我必须使用DLL提供的API以及像这样的标题
namespace ALongNameToType {
class ALongNameToType {
static void Foo();
}
}
有没有办法使用ALongNameToType :: ALongNameToType :: Foo而不必每次都输入ALongNameToType :: ALongNameToType?我尝试使用using namespace ALongNameToType
,但在Visual Studio中出现了模糊的符号错误。更改命名空间名称或删除它会给我发现链接器错误。
答案 0 :(得分:20)
我不知道什么是模棱两可的,但你可以避免与其他Foo函数的所有冲突:
namespace ALongNameToType {
struct ALongNameToType {
static void Foo();
};
}
typedef ALongNameToType::ALongNameToType Shortname;
int main() {
Shortname::Foo();
}
答案 1 :(得分:3)
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();
}
答案 2 :(得分:3)
using ALongNameToType::ALongNameToType::Foo;
如果您只想将其用作Foo()
。
答案 3 :(得分:1)
有三种方法可以使用using
。一个用于整个命名空间,一个用于命名空间中的特定事物,一个用于派生类,表示它不想隐藏在基类中声明/定义的内容。您可以使用其中的第二个:
using ALongNameToType::ALongNameToType
不幸的是,这对你不起作用(由于命名空间的模糊性和具有相同名称的类)。将这种类型的使用与之前的答案结合起来应该消除歧义:
namespace alntt = ALongNameToType;
using alntt::ALongNameToType;
但是一旦你重命名了命名空间,你真的不需要using
语句(只要你每次使用该类时都习惯编写(缩短的)命名空间:
namespace alntt = ALongNameToType;
alntt::ALongNameToType a;
...