将特征矩阵存储在二进制文件中的通用函数

问题描述 投票:0回答:1

我知道以下代码可用于将数据类型为

double
的特征矩阵的数据写入二进制文件。

template<class  T> 
void WriteEigenMatrix(const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& m, const char* fileName)
{
    std::ofstream outFile(fileName, std::ios_base::out | std::ios_base::binary);
    outFile.write(m.data(), m.rows()*m.cols());
    outFile.close();`
}

如何概括此函数以接受其他特征数据类型(如

Eigen::Vector
Eigen::Array
)作为输入?
如果我使用
Eigen::EigenBase
,我知道该函数将接受所有此类数据类型。然而,问题是我不能再使用
m.data()
,因为它没有在基类中定义。
有什么建议可以解决这个问题吗?

c++ abstract-class eigen eigen3
1个回答
0
投票

如果您只想允许“密集”对象,您可以按如下方式操作:

template<class Derived>
void WriteEigen(const Eigen::DenseBase<Derived>& dense, const char* fileName) {
    std::ofstream outFile(fileName, std::ios_base::out | std::ios_base::binary);
    outFile.write(reinterpret_cast<const char*>(dense.derived().data()), dense.rows() * dense.cols());
    outFile.close();
}

所有稠密矩阵(包括向量和数组)都继承自

DenseBase
,在
derived
上调用
DenseBase
将返回具体的矩阵类型。

或使用您喜欢的任何底座。

© www.soinside.com 2019 - 2024. All rights reserved.