我按以下方式声明了我的类/结构:
namespace NS {
class A {
public:
struct B {
int x;
int y;
}
}
}
int main() {
NS::A::B objB;
}
我想知道是否有任何方式可以更紧凑的方式参考B.我尝试使用"使用"但这似乎只适用于名称空间。
答案 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}}