这是代码。是否有可能使最后一行工作?如何让编译器在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