我想将一个类移动到一个不同的命名空间,但让用户暂时使用旧的命名空间(用户会知道它已被弃用)。
我有:
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!
我如何实现目标?
答案 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