C++:隐藏一些函数

标签 c++ math namespaces header scope

我重新定义了一些数学函数(以便它们更快 - 即:不太准确 - 或使用模板)。我将这些函数放在命名空间中,它们工作得很好。

不过,我经常会忘记从命名空间调用函数(即:我忘记编写 mymath::cosusing mymath::cos;当我想调用 cos 时),很难找出我忘记它的地方(直到现在我只能通过分析才能找到它)。

鉴于此

  • 在我的数学头文件中包含标准的math.hcmath 头文件,而那
  • 我需要包含标准数学标题(因为我的一些函数只是标准函数的包装器,我希望它们是内联的或模板化的),

如果使用全局命名空间(即:没有命名空间)数学函数,是否有一种可移植的方法来隐藏标准数学函数以便报告编译错误?

一个解决方案可能是将 using namespace mymath; 放在我的数学头文件的底部,但这个解决方案看起来并不那么好:它破坏了命名空间的全部目的;我更愿意明确说明是使用 mymath 中的函数还是 std 中的函数,这样我就不得不在没有风险的情况下,在较差的函数或更准确的函数之间做出选择忘记它。


编辑:

许多答案说,如果我使用全局命名空间中的 cos(不使用 stdmymath),并包含 cmath(而不是 math.h),编译应该会失败。

我不知道标准是怎么说的,但是:

#include <cmath>
int main( ) {
    cos( M_PI );
    return 0;
}

使用 GNU GCC (g++) 4.5.1(及旧版本)编译良好。

最佳答案

将它放在一个头文件中,并在所有地方#include它:

namespace DontUseMe {  
double cos (double) ;  
// ...etc.  
}  
using namespace DontUseMe ;

关于C++:隐藏一些函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416444/

相关文章:

c++ - 如何为菱形继承实现移动构造函数?

c++ - gMock是否不与Visual Studio 2019链接

c++ - cpp单位的使用方法

java - 为什么这个二次方程不会返回负数?

c++ - 如何将值对齐给定的对齐方式

xml - 如何转换 XML 文档具有命名空间的 xsl

c++ - 如何将多参数模板传递给宏?

math - F# floor 函数不能正确舍入?

typescript - 升级到 TypeScript 3.5 导致导入的命名空间在运行时无法找到 Enum

ruby-on-rails - Heroku- 错误日志未初始化的常量 Admin (NameError)