谁能向我解释为什么以下工作:为什么这个C++类不等同于这个模板?
template<class T> class MyTemplateClass {
public:
T * ptr;
};
int main(int argc, char** argv) {
MyTemplateClass<double[5]> a;
a.ptr = new double[10][5];
a.ptr[2][3] = 7;
printf("%g\n", a.ptr[2][3]);
return 0;
}
但这并不:
class MyClass {
public:
double[5] * ptr;
// double(*ptr)[5]; // This would work
};
int main(int argc, char** argv) {
MyClass a;
a.ptr = new double[10][5];
a.ptr[2][3] = 7;
printf("%g\n", a.ptr[2][3]);
return 0;
}
显然,不仅仅是文本替换由参数模板更多的模板实例 - 这个魔术有简单的解释吗?
对于后者的编译器(克++ 4.1.2)吐出以下错误:
test.cxx:13: error: expected unqualified-id before '[' token
其中线13是double[5] * ptr;
线。
的问题不是:
“为什么MyClass的例子失败 - 因为C++不允许的Java风格的数组声明;-)?”。
但就是:
“为什么MyTemplateClass例如成功吗?”
编译器是否吐出任何错误消息? – Tom 2009-05-19 16:15:02