以紧凑的方式引用嵌套类

时间:2015-07-30 18:37:16

标签: c++

我按以下方式声明了我的类/结构:

namespace NS {
class A {
    public:
    struct B {
        int x;
        int y;
    }
}
}

int main() {
    NS::A::B objB;
}

我想知道是否有任何方式可以更紧凑的方式参考B.我尝试使用"使用"但这似乎只适用于名称空间。

4 个答案:

答案 0 :(得分:4)

使用typedef:typedef NS::A::B MyB

然后你的主要成为:

int main() {
    typedef NS::A::B MyB
    MyB objB;
}

答案 1 :(得分:2)

  

我尝试使用“使用”,但这似乎只适用于名称空间。

使用效果很好:

namespace NS {
    class A {
        public:
        struct B {
            int x;
            int y;
        };
    };
}

using MyB = NS::A::B;

int main() {
    NS::A::B objB;
    MyB objB2;
}

与typedef方法相比,此解决方案有some discussion on SO。结论是它们是等价的。

答案 2 :(得分:1)

typedef?在代码块中测试:

namespace NS {
class A {
    public:
    struct B {
        int x;
        int y;
    };
};
}
typedef NS::A::B NSAB;


int main() {

    //NS::A::B objB;
    NSAB objc;

}

答案 3 :(得分:1)

您需要别名声明,而不是using声明或using-directive。您需要提供一个名称:

typedef

在某些情况下,这种方式更具可读性,可以在template<class T> struct Foo { struct Bar {}; }; template<class T> using Bar = typename Foo<T>::Bar; 中使用的模板中使用。

例如:

{{1}}