模板函数重载 C++
template function overloading c++
我正在研究通用矩阵 class。
我要重载 + 函数,以便什么时候执行:
- 矩阵=标量*矩阵
- 矩阵=矩阵*标量
- 矩阵=矩阵*矩阵
尝试这样做(函数重载):
这是正确的方法吗?
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) { }
另外,我很高兴知道我的声明是否存在问题。
感谢您的帮助。
看了题,有了另类的想法。
matrix = scalar * matrix
matrix = matrix * scalar
matrix = matrix * matrix
另一种方法是使用函数对象并将它们传递给矩阵 class,这样函数对象就可以处理算法细节...这允许您在以后需要时添加更多。
运算符链接在上面的代码中也很方便,因此,return 通过引用重载运算符。
如果你想重载operator*
允许
- 矩阵=标量*矩阵
- 矩阵=矩阵*标量
- 矩阵=矩阵*矩阵
您需要将这三个运算符重载定义为矩阵周围命名空间中的函数 class:
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) { ... }
在您的例子中,您在 class 中将运算符声明为 friend
函数,这也是一样的,因为它实际上声明了自由函数 和 他们 friends
。如果确实需要 friend
,则取决于实现。如果不是,为了清楚起见,我会将它们移到 class 之外,但请记住,那时您将需要 template<typename T>
。关于其余的代码,没有任何明显的损坏,但无论如何它只是真实代码的摘录。
我正在研究通用矩阵 class。 我要重载 + 函数,以便什么时候执行:
- 矩阵=标量*矩阵
- 矩阵=矩阵*标量
- 矩阵=矩阵*矩阵
尝试这样做(函数重载): 这是正确的方法吗?
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) { }
另外,我很高兴知道我的声明是否存在问题。 感谢您的帮助。
看了题,有了另类的想法。
matrix = scalar * matrix
matrix = matrix * scalar
matrix = matrix * matrix
另一种方法是使用函数对象并将它们传递给矩阵 class,这样函数对象就可以处理算法细节...这允许您在以后需要时添加更多。
运算符链接在上面的代码中也很方便,因此,return 通过引用重载运算符。
如果你想重载operator*
允许
- 矩阵=标量*矩阵
- 矩阵=矩阵*标量
- 矩阵=矩阵*矩阵
您需要将这三个运算符重载定义为矩阵周围命名空间中的函数 class:
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) { ... }
在您的例子中,您在 class 中将运算符声明为 friend
函数,这也是一样的,因为它实际上声明了自由函数 和 他们 friends
。如果确实需要 friend
,则取决于实现。如果不是,为了清楚起见,我会将它们移到 class 之外,但请记住,那时您将需要 template<typename T>
。关于其余的代码,没有任何明显的损坏,但无论如何它只是真实代码的摘录。