誰能向我解釋爲什麼以下工作:爲什麼這個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