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;
}
Run Code Online (Sandbox Code Playgroud)
这个问题与我们可以像在命名空间中对类名进行别名一样吗?,此问题明确询问有关某个类中某个类的细微差别。
是的,C ++提供了一种访问类型的方法。您需要的是类型别名。使用
using bar_class_in_class = foo_class::bar_class_in_class;
Run Code Online (Sandbox Code Playgroud)
允许您bar_class_in_class代替使用foo_class::bar_class_in_class。这是作用域,因此如果在中进行操作main,则只能在中看到别名main
请注意,您还可以“更改内部类型的名称”
using my_type = foo_class::bar_class_in_class;
Run Code Online (Sandbox Code Playgroud)
的功能与上述相同,但是您可以将其my_type用作类型名称。这可能是一个很好的便利。