如何在已经声明了相同功能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

10-08 00:44