C ++是否提供一种方法来声明一个类中具有类类型的对象(例如下面的示例中的foo_class::bar_class_in_class
),而不必像使用该类中的类那样使用范围解析运算符命名空间(例如下面的示例中的foo_namespace::bar_class_in_namespace
)?
namespace foo_namespace {
class bar_class_in_namespace {
};
}
class foo_class {
public:
class bar_class_in_class {
};
};
int main() {
using namespace foo_namespace;
bar_class_in_namespace bar_0;
// Can I access bar_class_in_class without having to use the
// the scope resolution operator?
foo_class::bar_class_in_class bar_1;
}
该问题与Can we alias a class name the way we do in namespaces?相同,只是该问题明确询问有关某个类中某个类的问题。
答案 0 :(得分:9)
是的,C ++提供了一种访问类型的方法。您需要的是类型别名。使用
using bar_class_in_class = foo_class::bar_class_in_class;
允许您使用bar_class_in_class
代替foo_class::bar_class_in_class
。这是有范围的,因此如果您在main
中进行操作,则只能在main
中看到别名
请注意,您还可以“更改内部类型的名称”
using my_type = foo_class::bar_class_in_class;
做与上面相同的事情,但是您将使用my_type
作为类型名称。这可能是一个很好的便利。