将类移动到不同的名称空间

时间:2014-11-17 02:42:31

标签: c++

我想将一个类移动到一个不同的命名空间,但让用户暂时使用旧的命名空间(用户会知道它已被弃用)。

我有:

namespace vx {
    class vec3
    {
    public:
       vec3(double a, double b, double c);
       double length();
       vec3 operator+(const vec3& rhs) const;
    };
}

现在我有:

namespace vx
{
    class vec3
    {
    public:
        vec3(double a, double b, double c) : v(a, b, c) {}
        vec3(Math::vec3 iVec) : v(iVec) {}
        Math::vec3 operator=(const Math::vec3& iVec);
        operator Math::vec3() { return v; }
        operator Math::vec3() const { return v; }
    private:
        Math::vec3 v;
    };
}
namespace Math {
    class vec3
    {
    public:
        vec3(double a, double b, double c);
        double length();
    };
}
Math::vec3 operator+(const Math::vec3& lhs, const Math::vec3& rhs);

将一元operator-(const vec3&) const转换为二元Math::operator-(const Math::vec3&, const Math::vec3&);

我修复了很多问题,但现在我仍然遇到Math :: vec :: length()

的问题

在我的一些旧代码中

...
vx::vec3 v(1,2,3);
double l =  vec3.length(); // The implicit conversion doesn't work here!

我如何实现目标?

1 个答案:

答案 0 :(得分:0)

使用名称空间别名:

namespace vx = Math;

更新:

如果你不能通过命名空间别名替换整个vx命名空间,
您只能替换其中的vx::vec3类:

namespace Math {
class vec3 {
  // ...
};
}

namespace vx {
using Math::vec3;
}

更新第二名:

如果您在“前向声明”方面仍然存在一些问题, 怎么样:

namespace Math {
class vec3 {
  // ...
};

// all other classes in vx namespace
using vx::vec1;
using vx::vec2;
}

#define vx Math