你如何在函数外定义函数嵌套class的实现?
How do you define the implementation of function nested class outside of the function?
我有这样的代码:
class A {
void foo() {
class B {
void bar() { std::cout << "Bar!" << endl; }
};
B b;
}
};
但是我想在函数范围之外实现结构B
。如果这只是 A
中的嵌套 class 我可以这样做:
class X {
void foo();
class Y;
}
class X::Y {
void bar() { std::cout << "Bar!" << endl; }
}
但我不知道是否可以为 class B
做类似的事情。编译器告诉我 class 的类型是 A::foo::B
但是如果我试图定义 class 我被告知 foo
不是 [=16= 的成员]:
一次尝试:
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'
那是不可能的。名称 C
在函数 foo
的范围之外是不可见的。与 classes 不同的是,现在可以从函数外部进入函数范围。
请注意,A
在您的示例中完全不相关。如果 foo
是命名空间范围的函数,结果将完全相同。
如果你想要一个局部函数 class,你必须完全在那个函数中实现它。
我有这样的代码:
class A {
void foo() {
class B {
void bar() { std::cout << "Bar!" << endl; }
};
B b;
}
};
但是我想在函数范围之外实现结构B
。如果这只是 A
中的嵌套 class 我可以这样做:
class X {
void foo();
class Y;
}
class X::Y {
void bar() { std::cout << "Bar!" << endl; }
}
但我不知道是否可以为 class B
做类似的事情。编译器告诉我 class 的类型是 A::foo::B
但是如果我试图定义 class 我被告知 foo
不是 [=16= 的成员]:
一次尝试:
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'
那是不可能的。名称 C
在函数 foo
的范围之外是不可见的。与 classes 不同的是,现在可以从函数外部进入函数范围。
请注意,A
在您的示例中完全不相关。如果 foo
是命名空间范围的函数,结果将完全相同。
如果你想要一个局部函数 class,你必须完全在那个函数中实现它。