将嵌套类导入名称空间
假设我有这样的课程:
class A {
public:
class B {
// ...
};
static void f();
// ...
};
我可以将B
指向A::B
,将f()
指向A::f()
,但是我可以将B
和f()
导入到全局/当前的命名空间吗? 我试过了
using A::B;
但是这给了我一个编译错误。
您应该可以使用该类的命名空间别名:
using B = A::B;
然而,你不能用成员函数来做到这一点,即使使用静态成员函数也不行。
编辑:根据这个SO回答(C ++ 11中'typedef'和'using'有什么区别),这应该是有效的,并且实际上以typedef
方式创建一个类型别名。 但是,它只是C ++ 11。
通过声明指向静态函数的变量,C ++ 11中的静态成员函数有一个解决方法:
struct Foo
{
static void bar()
{ }
};
auto bar = Foo::bar;
编辑:当然,在较早的C ++标准中也可能有一个指向静态成员函数的全局变量,但它比使用C ++ 11的auto
关键字更加混乱。 在上面的例子中,它将是:
void (*bar)() = Foo::bar;
以下是针对您的问题的两种解决方法:
1) B类:
typedef A::B B;
2)函数f():
inline void f()
{
A::f();
}
但在使用前请三思。
编辑:在C ++ 11中,您可以执行auto f = A::f;
但是这实际上创建了一个指向函数的指针,而函数指针不能被内联。
你可以typedef
typedef A::B B;
链接地址: http://www.djcxy.com/p/78643.html