簡體   English   中英

模板函數重載C ++

[英]template function overloading c++

我正在研究通用矩陣類。 我重載了+函數,以便在執行時:

  1. 矩陣=標量*矩陣
  2. 矩陣=矩陣*標量
  3. 矩陣=矩陣*矩陣

試圖這樣做(函數重載):這是正確的方法嗎?

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*以允許

  1. 矩陣=標量*矩陣
  2. 矩陣=矩陣*標量
  3. 矩陣=矩陣*矩陣

您需要將這三個運算符重載定義為矩陣類周圍的名稱空間中的函數:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM