gpt4 book ai didi

c++ - 命名空间继承自 C++ 中的包含文件

转载 作者:行者123 更新时间:2023-12-04 17:06:43 29 4
gpt4 key购买 nike

对于统计包,我需要包含一个数值计算库,我选择了 Armadillo 。我想将所有对 Armadillo 的依赖保存在一个“包装器”文件中(以便能够轻松切换数字库)。目前 Armadillo 的 wrapper ,名为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

这样,如果我导入这个标题,我就可以访问 Matrix , VectorRowVector模板化类,无需直接导入 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(...);
}

对于您希望能够切换到的每个实现,您都必须拥有这些包装器之一。

关于c++ - 命名空间继承自 C++ 中的包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50046174/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com