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

但是,经常会发生这样的情况,我忘记了从我的命名空间中调用函数(即:当我想调用mymath::cos时,我忘记写using mymath::cos;cos),要找出我忘记了它的位置是很困难的(直到现在我找到了它)只能通过剖析)。

鉴于

  • 我仅在我的数学头中包括标准math.hcmath头,而
  • 我需要包括标准数学 header (因为我的某些函数只是标准函数的包装,并且我希望它们是内联的或被模板化),

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

    一种解决方案可能是在我的数学头文件的底部放置一个using namespace mymath;,但是这种解决方案似乎并不那么出色:它破坏了 namespace 的全部目的;我宁愿必须明确地说出要使用mymath还是std中的函数,这样我就不得不在fester或更准确的函数之间进行选择,而不会忘记它。

    编辑:

    许多答案说,如果我从全局 namespace 中使用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 ;
    

    10-05 23:13