我在项目中定义了一个Vector2类
class Vector2
{
public:
Vector2();
~Vector2();
protected:
float mX;
float mY;
}
我开始使用名为SFML
的库除此之外,它还为我处理绘制形状和图像。
SFML defines it's own Vector2课程。显然,这会导致一些命名空间问题。以下是我如何解决它:
// Using an SFML Vector2
sf::Vector2 sfmlVector;
// Using my Vector2
::Vector2 myVector;
我希望“Vector2”总是被假定为我的vector2,而“sf :: Vector2”总是SFML的vector2,而不是必须将命名空间放入我的vector2或使用messier global :: namespace。
可以这样做吗?
答案 0 :(得分:1)
只要您不在sf
命名空间中添加代码,查找就不会尝试在该命名空间中找到Vector2
,并且会找到全局命名空间。如果您要在sf
命名空间中添加代码,那么它首先会找到sf::Vector2
...但我会认为库中的代码应该使用类型 in 图书馆。
答案 1 :(得分:1)
我仍然会将您自己的Vector2
类放入您自己的命名空间中,以避免污染全局类。但是,在使用类时,如果每次指定命名空间都很烦人,可以使用using declaration,如下所示:
using mynamespace::Vector2;
告诉编译器将Vector2
解析为文件其余部分(翻译单元)的矢量类型。