2014-11-17 50 views
0

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

我:

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&);

我定了很多的问题,但是现在我仍然有问题,数学: :vec :: length()

在一些旧的代码中,我有

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

我该如何实现目标?

+0

你可以添加到'VX :: vec3':'双长度( )const {return v.length(); }'.... –

+0

'Math :: vec3'倾向于固定版本的'vx :: vec3'或者2个类是否相同? – Jarod42

+0

我们想把整个类vec3移动到新的名字空间。弃用的类可以是一个存根,可以在不修改的情况下编译旧的代码。 – papaDoc

回答

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 
+0

不幸的是,命名空间vx已经被使用,不能作为别名。 – papaDoc

+0

如果用户在他的代码中(在他的头文件之一中)有一个前向声明,仍然存在一些问题:'namespace vx {class vec3; }”。他将得到以下错误:使用vec3 =“使用vec3 = Math :: vec3l”和“错误”类vx :: vec3“的错误冲突声明”之前的声明为“class vx :: vec3” – papaDoc

相关问题