我有这样的代码:
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'
答案 0 :(得分:2)
这是不可能的。名称C
在函数foo
范围之外不可见。与类不同,现在有办法从函数外部进入函数范围。
请注意A
在您的示例中完全不相关。如果foo
是命名空间范围函数,则结果将完全相同。
如果你想要一个函数本地类,你必须完全在该函数中实现它。