假设我有这样的课程:
class A {
public:
class B {
// ...
};
static void f();
// ...
};
我可以引用B
asA::B
和 to f()
as A::f()
,但我可以导入B
和f()
到全局/当前命名空间吗?我试过
using A::B;
但这给了我一个编译错误。
假设我有这样的课程:
class A {
public:
class B {
// ...
};
static void f();
// ...
};
我可以引用B
asA::B
和 to f()
as A::f()
,但我可以导入B
和f()
到全局/当前命名空间吗?我试过
using A::B;
但这给了我一个编译错误。
以下是针对您的问题的两种解决方法:
1) B 类:
typedef A::B B;
2)函数 f():
inline void f()
{
A::f();
}
但在使用它们之前要三思而后行。
编辑:在 C++11 中你可以这样做auto f = A::f;
,但这实际上会创建一个指向函数的指针,并且函数指针不能被内联。
您应该能够为该类使用命名空间别名:
using B = A::B;
但是,您不能使用成员函数执行此操作,即使使用静态成员函数也不行。
编辑:根据this SO answer(What is the difference between 'typedef' and 'using' in C++11)这应该是有效的,并且实际上以相同的方式创建了一个类型别名typedef
。但是,它只是 C++11。
在 C++11 中有一个静态成员函数的解决方法,通过声明一个指向静态函数的变量:
struct Foo
{
static void bar()
{ }
};
auto bar = Foo::bar;
编辑:当然,在旧的 C++ 标准中也可以有一个指向静态成员函数的全局变量,但它比使用auto
C++11 的关键字更混乱。在上面的示例中,它将是:
void (*bar)() = Foo::bar;
你可以typedef
typedef A::B B;