我想构建一个数组,其中包含指向大型稀疏矩阵和密集矩阵的指针。然后,我希望使用多态性对它们进行操作,并避免复制/分配大块内存。例如
std::vector<UnkownType*> matrices;
matrices.emplace_back(get_large_dense_matrix_ptr());
matrices.emplace_back(get_large_sparse_matrix_ptr());
Eigen::MatrixXd result(known_size, known_size);
for(mat : matrices){
result+=*mat;
}
UnkownType
应该是什么类型?我考虑过使用引用的变体或引用包装器,但这是被禁止的。
如果你有c++ 17,你可以使用std::variant
using matrix_variant = std::variant<Eigen::MatrixXd, Eigen::SparseMatrix<double>>;
std::vector<matrix_variant> matrices;
matrices.emplace_back(Eigen::MatrixXd::Zeros(10, 10).eval());
matrices.emplace_back(Eigen::SparseMatrix<double>{});
Eigen::MatrixXd result;
for(const matrix_variant& matrix: matrices) {
if(std::holds_alternative<Eigen::MatrixXd>(matrix)) {
const Eigen::MatrixXd& dense = std::get<Eigen::MatrixXd>(matrix);
result += dense;
} else if(std::holds_alternative<Eigen::SparseMatrix<double>>(matrix)) {
const Eigen::SparseMatrix<double>& sparse =
std::get<Eigen::SparseMatrix<double>>(matrix);
result += sparse;
}
}