C ++是否提供一种无需范围解析运算符即可访问类中的类的方法?

pla*_*att 4 c++

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)

这个问题与我们可以像在命名空间中对类名进行别名一样吗?,此问题明确询问有关某个类中某个类的细微差别。

Nat*_*ica 9

是的,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用作类型名称。这可能是一个很好的便利。