Я предполагаю, что вы объявляете шаблон класса Matrix
с аргументом типа T
и хотите использовать определенный operator>>
(вы должны сделать это более явным в вопросе):
template <typename T>
class Matrix {
int rows, cols;
T* elements;
public:
Matrix( int c, int r ); // Do you really want the number of
// rows/columns to be of type `T`??
// Note: removed template, you only want to befriend (and define)
// a single operator<< that takes a Matrix<T> (the <T> is optional
// inside the class braces
friend std::istream& operator>>( std::istream& i, Matrix& m )
{
// m.rows, m.cols and m.elements is accessible here.
return i;
}
};
И тогда его довольно просто использовать:
Matrix<double> m( 1, 2 );
std::cin >> m;
Это не единственный вариант, он просто самый распространенный.То есть в общем случае шаблон класса может использовать одну (не шаблонную) функцию (например, operator<<
и operator>>
как функции), как в приведенном выше коде, или он может захотеть использовать шаблон функции (все экземпляры) илиКонкретная реализация шаблона функции.
Я написал подробное объяснение различных опций и поведения здесь , и я рекомендую вам прочитать его.