如何定义函数外部函数嵌套类的实现?

时间:2016-10-13 11:15:42

标签: c++ inner-classes

我有这样的代码:

class A {
  void foo() {
    class B {
      void bar() { std::cout << "Bar!" << endl; }
    };
    B b;
  }
};

但是我想在函数范围之外实现struct B。如果这只是A中的嵌套类,我可以执行以下操作:

class X {
  void foo();
  class Y;
}
class X::Y {
  void bar() { std::cout << "Bar!" << endl; }
}

但如果有可能为班级B做类似的事情,我就无法解决。编译器告诉我该类的类型是A::foo::B但是如果我尝试定义该类,我被告知foo不是A的成员:

尝试:

class A {
  void foo();
};

class A::foo::C {
  void bar() { std::cout << "Bar!" << std::endl; }
};

void A::foo()  {
  class C;
  C c;
  c.bar();
}

错误:

test.cpp(15) : error C3083: 'foo': the symbol to the left of a '::' must be a type
test.cpp(15) : error C2039: 'C' : is not a member of 'A'
    test.cpp(6) : see declaration of 'A'
test.cpp(19) : error C2079: 'c' uses undefined class 'A::foo::C'

1 个答案:

答案 0 :(得分:2)

这是不可能的。名称C在函数foo范围之外不可见。与类不同,现在有办法从函数外部进入函数范围。

请注意A在您的示例中完全不相关。如果foo是命名空间范围函数,则结果将完全相同。

如果你想要一个函数本地类,你必须完全在该函数中实现它。