[英]template function overloading c++
我正在研究通用矩陣類。 我重載了+函數,以便在執行時:
試圖這樣做(函數重載):這是正確的方法嗎?
template<class T>
class Matrix
{
std::vector< std::vector<T> > mat;
size_t rows , cols;
public:
Matrix(){}
Matrix(const std::string){ }
Matrix(const size_t r, const size_t c, const std::vector<T> v){ }
Matrix(const Matrix& other);
Matrix<T> operator=(const Matrix<T> &other) { }
Matrix<T> operator+(const Matrix<T> &other) const{}
friend Matrix<T> operator*(const T &mat, const Matrix<T> &scalar) { }
friend Matrix<T> operator*(const Matrix<T> &mat, const T &scalar) { }
friend Matrix<T> operator*(const Matrix<T> &mat, const Matrix<T> &other) { }
我也很高興知道我的聲明是否存在一些問題。 謝謝你的幫助。
如果要重載operator*
以允許
您需要將這三個運算符重載定義為矩陣類周圍的名稱空間中的函數:
class Matrix { ... };
Matrix operator*(Scalar const& s, Matrix const& m) { ... }
Matrix operator*(Matrix const& m, Scalar const& s) { ... }
Matrix operator*(Matrix const& m1, Matrix const& m2) { ... }
在你的情況,你聲明的運算作為friend
的類,它不一樣的,因為它實際上宣告自由的功能,並使其內部功能friends
。 如果實際需要friend
則取決於實現。 如果不是這樣,為了清楚起見,我會將它們移出類,但請記住,那時您將需要template<typename T>
。 關於代碼的其余部分,沒有任何明顯的損壞,但是無論如何它僅僅是真實代碼的摘錄。
看着這個問題,有了另一種想法。
matrix = scalar * matrix
matrix = matrix * scalar
matrix = matrix * matrix
另一種方法是使用函數對象並將它們傳遞給矩陣類,以便函數對象可以處理算法細節...這允許您稍后在需要時添加更多內容。
在上面的代碼中,運算符鏈接也很方便,因此,對於重載的運算符,可以通過引用返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.