将嵌套类导入名称空间

假设我有这样的课程:

class A {
public:
    class B {
        // ...
    };
    static void f();
    // ...
};

我可以将B指向A::B ,将f()指向A::f() ,但是我可以将Bf()导入到全局/当前的命名空间吗? 我试过了

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

上一篇: Import nested classes into namespace

下一篇: What's the difference between using