這是代碼。是否有可能使最後一行工作?如何讓編譯器在assigmnet處理模板類參數?
#include<iostream>
using namespace std;
template <int X, int Y>
class Matrix
{
int matrix[X][Y];
int x,y;
public:
Matrix() : x(X), y(Y) {}
void print() { cout << "x: " << x << " y: " << y << endl; }
};
template < int a, int b, int c>
Matrix<a,c> Multiply (Matrix<a,b>, Matrix<b,c>)
{
Matrix<a,c> tmp;
return tmp;
}
int main()
{
Matrix<2,3> One;
One.print();
Matrix<3,5> Two;
(Multiply(One,Two)).print(); // this works perfect
Matrix Three=Multiply(One,Two); // !! THIS DOESNT WORK
return 0;
}
我同意您的所有代碼評論註釋。請注意1有爭議。 Herb Sutter被認爲更喜歡那種風格。我看到他的推理。他認爲只有'使用名字空間標準'纔可以,'其他所有人都被禁止。也就是說,標題中的全局「使用」總是一個壞主意。再次,我同意1. – 2010-05-25 14:47:14
順便說一下,C++ 0x可能會在2012年才能最終確定,因此C++ 11與C++ 0x一樣具有誤導性。我更喜歡C++ 0x,因爲它更爲人所知,沒有人期望在2009年發佈。 – 2010-05-25 14:52:14
@Caspin:這不是頭文件(有一個main()函數實現),但仍然如此。如果Sutter確實說過使用名稱空間標準,那麼他並不孤單,基本上所有介紹性的C++書籍和教程都使用它 - 這讓我感到非常傷心。它會導致如我所鏈接的問題中的那種微妙的錯誤。 [我前幾天廣泛討論這個問題。](http://stackoverflow.com/questions/2879555/2880136#2880136) – sbi 2010-05-25 14:57:04