我重新定义了一些数学函数(以便它们更快 - 即:不太准确 - 或使用模板)。我将这些函数放在命名空间中,它们工作得很好。
不过,我经常会忘记从命名空间调用函数(即:我忘记编写 mymath::cos
或 using mymath::cos;
当我想调用 cos
时),很难找出我忘记它的地方(直到现在我只能通过分析才能找到它)。
鉴于此
- 我只在我的数学头文件中包含标准的
math.h
或cmath
头文件,而那 - 我需要包含标准数学标题(因为我的一些函数只是标准函数的包装器,我希望它们是内联的或模板化的),
如果使用全局命名空间(即:没有命名空间)数学函数,是否有一种可移植的方法来隐藏标准数学函数以便报告编译错误?
一个解决方案可能是将 using namespace mymath;
放在我的数学头文件的底部,但这个解决方案看起来并不那么好:它破坏了命名空间的全部目的;我更愿意明确说明是使用 mymath
中的函数还是 std
中的函数,这样我就不得不在没有风险的情况下,在较差的函数或更准确的函数之间做出选择忘记它。
编辑:
许多答案说,如果我使用全局命名空间中的 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 ;
关于C++:隐藏一些函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416444/