В C ++ 11 вы можете использовать auto
для этого:
auto Three=Multiply(One,Two);
В текущем C ++ вы не можете этого сделать.
Один из способов избежать написания имени типа - переместить код, связанный с Three
, в шаблон функции:
template< int a, int b >
void do_something_with_it(const Matrix<a,b>& One, const Matrix<a,b>& Two)
{
Matrix<a,b> Three = Multiply(One,Two);
// ...
}
int main()
{
Matrix<2,3> One;
One.print();
Matrix<3,5> Two;
do_something_with_it(One,Two);
return 0;
}
Редактировать: Еще несколько примечаний к вашему коду.
- Будьте осторожны с
using namespace std;
, это может привести к очень неприятным сюрпризам .
- Если вы не планируете иметь матрицы с отрицательными размерами, используйте
unsigned int
или, что еще более уместно, std::size_t
будет лучше для аргументов шаблона.
- Вы не должны передавать матрицы за копию. Вместо каждого проходного эталона вместо .
Multiply()
можно записать operator*
, что позволило бы Matrix<2,3> Three = One * Two;
print
вероятно должен принять поток для печати как std::ostream&
. И я бы предпочел, чтобы это была свободная функция вместо функции-члена. Я бы подумал о перегрузке operator<<
вместо того, чтобы назвать ее print
.