名称空间从C 中的Include File继承



对于统计包,我需要包括一个数值计算库,然后选择了armadillo。我想将所有依赖关系保留在一个"包装器"文件中(能够轻松切换数值库(。目前,包装器到armadillo,称为mixt_LinAlg.h仅包含:

#ifndef MIXT_LINALG_H
#define MIXT_LINALG_H
#include "mixt_Typedef.h"
#include <armadillo>
using namespace arma;
namespace mixt {
template<typename T>
using Matrix = Mat<T>;
template<typename T>
using Vector = Col<T>;
template<typename T>
using RowVector = Row<T>;
}
#endif // MIXT_LINALG_H

这样,如果我导入此标头,则可以访问MatrixVectorRowVector模板类,而无需直接导入Armadillo。现在,在Armadillo中,有一个函数arma::approx_equal,例如,该功能为两个Col<T>,并返回bool

如果我简单地使用approx_equal而不是arma::approx_equal调用此功能,则它会在MacOS上与Clang一起编译。但是,当我在Ubuntu上使用GCC编译时,它抱怨它找不到approx_equal

如何使approx_equal可用于任何包含mixt_LinAlg.h的文件,而无需在包括文件中引用arma名称空间?

在您自己的名称空间中添加到标题中的 approx_equal,该命名空间围绕arma::approx_equal或任何其他实现。

换句话说,将类似的东西添加到armadillo的标题:

... my_namespace::approx_equal (...) {
    return arma::approx_equal(...);
}

您必须为您要切换的每个实现都有这些包装器之一。

相关内容

最新更新