用类似类型C++的类执行函数
performing function with classes of similar type C++
我想要实现矩阵的表示。为此,我有两种类型的矩阵-正则矩阵和稀疏矩阵,它们在实现-一个保存向量,第二个保存索引和值的映射,两者都继承自Matrix类。
我想实现+运算符,它对矩阵进行运算并接收另一个矩阵。但当我实现+运算符时,我可能会接收作为参数的稀疏/正则矩阵。
有没有办法接收矩阵,我不知道它是2的哪种类型,并执行+运算符?意思是,如果在类SparseMatrix中,我接收稀疏/正则矩阵,我如何实现运算符,使无论我得到两种类型中的哪一种,它都能工作?
Matrix & operator+ (Matrix other)
{
...
}
我可能会实现operator+
的两个版本,并让它们调用一个助手模板方法:
template <typename ITER>
Matrix add (ITER other_it) {
//...
}
Matrix operator+ (RegularMatrix other)
{
return add(other.begin());
}
Matrix operator+ (SparseMatrix other)
{
return add(other.begin());
}
您可以将operator+
作为模板,但这样可以确保只允许使用那些Matrix
类型。
正如我所指出的,您不应该从+
返回引用,因为结果需要指向操作返回后存在的实例。
我们可以使用多态性来创建矩阵的不同实现。通过Matrix
的公共接口,每个实现都可以进行交互。
class Matrix
{
class iterator { ... }
friend Matrix operator+(const Matrix &lhs, const Matrix &rhs)
{
// iterate, add, and return new matrix
}
};
class SpareMatrix : public Matrix
{
iterator begin() { ... }
};
class Matrix
{
public:
virtual ~Matrix() {}
virtual Matrix& operator+(Matrix& other) = 0;
};
class MatrixSparse : public Matrix
{
public:
virtual ~MatrixSparse() {}
virtual Matrix& operator+(Matrix& other)
{
MatrixSparse* sparse = dynamic_cast<MatrixSparse*>(&other);
// TODO
}
};
class MatrixRegular : public Matrix
{
public:
virtual ~MatrixRegular() {}
virtual Matrix& operator+(Matrix& other)
{
MatrixRegular* regular = dynamic_cast<MatrixRegular*>(&other);
// TODO
}
};
此外,这里还有另一个SO线程处理从抽象类重载运算符的问题。
相关文章:
- 执行函数时导致崩溃的变量
- 在多个时间戳处执行函数
- 程序不会执行函数 c++
- 仅在函数模板中为那些定义了函数的类型执行函数
- 如何在 c++ 的类声明中执行函数?
- 从 std::vector 迭代器中执行函数指针
- 异步 60 秒延迟后C++执行函数?
- 如果发生错误,则返回错误值,否则,继续执行函数
- 执行函数两次
- C++11:如何在 n 秒后在主线程中执行函数
- C++执行函数和 lambda 内部
- 从主线程C 11执行函数调用的线程
- 现代C++执行函数返回指针的方法
- 为什么Win API线程执行函数,而标准线程则没有
- varargs宏以执行函数调用或将其转换为字符串
- 单步执行函数,但不进入VS2017的参数评估
- 加载 Lua 文件并使用变量而不执行函数
- 尽可能在编译时执行函数契约
- 在QT应用程序中创建并执行函数
- 如何使用boostsio_service.post()执行函数并使用数组或指针作为参数