我根本无法编译它。我可能不可能,但我不知道为什么不应该。
class A {
template <typename T>
class B {
int test() { return 0; }
};
//template <> class B<int>; <-with this, namepace error
B<int> myB_;
};
template <> class A::B<int> {
int test() {
return 1;
}
};
看起来编译器抱怨“必须在使用前声明显式特化“类 A::B”。” 如果我尝试在注释行中提供 froward 声明,编译器会抱怨“必须在包含模板的命名空间中声明显式特化“B”。” 我们在这里使用 2 种不同的编译器。这个错误来自 IBM 在 AIX 上的“xl”编译器,但在我们的 Sun 系统上编译时,我得到了类似的错误,但措辞不同。这似乎是一个第 22 条规则。
显然,这是一个高度人为、简单化的例子,但它代表了问题所在。我想在一个类中定义一个模板类,因为模板类只与包含类有关。不应从类外部访问模板。
我错过了什么吗?