我重新定义了一些数学函数(以使它们更快-即:不那么精确-或使用模板)。我将这些函数放在一个命名空间中,它们工作得很好。
但是,经常会发生这样的情况,我忘记了从我的命名空间中调用函数(即:当我想调用mymath::cos
时,我忘记写using mymath::cos;
或cos
),要找出我忘记了它的位置是很困难的(直到现在我找到了它)只能通过剖析)。
鉴于
math.h
或cmath
头,而如果使用全局命名空间(即,没有命名空间)数学函数,是否有一种可移植的方式隐藏标准数学函数,从而报告编译错误?
一种解决方案可能是在我的数学头文件的底部放置一个
using namespace mymath;
,但是这种解决方案似乎并不那么出色:它破坏了 namespace 的全部目的;我宁愿必须明确地说出要使用mymath
还是std
中的函数,这样我就不得不在fester或更准确的函数之间进行选择,而不会忘记它。编辑:
许多答案说,如果我从全局 namespace 中使用
cos
(不使用std
或mymath
),并包含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 ;