如何在已经声明了相同功能foo
(也具有相同参数)的命名空间bar
中引用没有命名空间的foo
函数?
最小的例子
int foo(int x) { // base function
return 2*x; // multiplies input by 2
}
namespace bar {
float foo(int x) { // same function
return (float)foo(x); // uses same math of original, but returns a float
}
}
我当然可以重命名
bar::foo
,但是由于在命名空间之外不会存在歧义问题,所以我不想而且不想让任何用户都简单。语境
我试图重新定义
tan
以返回 vector 而不是数字(因此也是x值)。这是我想要做的简化版本。#define _USE_MATH_DEFINES // enables mathematical constants
#include <cmath> // tan
template <typename T>
struct Vector2 { // simple Vector2 struct
T x,y;
};
namespace v2 {
template <typename T>
Vector2<T> tan(T angle) { // redefine tan to return a Vector2
Vector2<T> result;
if (-90 < angle && angle < 90)
result.x = 1;
else
result.x = -1;
result.y = tan(angle); // <-- refers to v2::tan instead of tan
return result;
}
}
int main() {
double tangens = tan(3.*M_PI_4); // M_PI_4 = pi/4
Vector2<double> tangens2 = v2::tan(3.*M_PI_4); // <-- no ambiguity possible
return 0;
}
最佳答案
函数“无 namespace ”实际上属于全局 namespace 。您可以将其称为::foo
。