说我有这样的课程:
class A {
public:
class B {
// ...
};
static void f();
// ...
};
我可以将B
称为A::B
,将f()
称为A::f()
,但我可以将B
和f()
导入全球/当前命名空间?我试过了
using A::B;
但是这给了我一个编译错误。
答案 0 :(得分:32)
以下是您的问题的两种解决方法:
1) B类:
typedef A::B B;
2)功能f():
inline void f()
{
A::f();
}
但在使用它们之前要三思而后行。
编辑:在C ++ 11中,您可以执行auto f = A::f;
,但这实际上会创建一个指向函数的指针,函数指针无法内联。
答案 1 :(得分:16)
您应该能够为该类使用名称空间别名:
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 ++标准中也可以使用指向静态成员函数的全局变量,但它比使用C的auto
关键字更麻烦。 ++ 11。在上面的例子中,它将是:
void (*bar)() = Foo::bar;
答案 2 :(得分:8)
你可以typedef
typedef A::B B;