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

时间:2019-03-14 16:51:29

标签: 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;
  }

该问题与Can we alias a class name the way we do in namespaces?相同,只是该问题明确询问有关某个类中某个类的问题。

1 个答案:

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