C ++命名空间与第三方库和同名类有关

时间:2013-01-31 17:38:12

标签: c++ class namespaces sfml

我在项目中定义了一个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。

可以这样做吗?

2 个答案:

答案 0 :(得分:1)

只要您不在sf命名空间中添加代码,查找就不会尝试在该命名空间中找到Vector2,并且会找到全局命名空间。如果您要在sf命名空间中添加代码,那么它首先会找到sf::Vector2 ...但我会认为库中的代码应该使用类型 in 图书馆。

答案 1 :(得分:1)

我仍然会将您自己的Vector2类放入您自己的命名空间中,以避免污染全局类。但是,在使用类时,如果每次指定命名空间都很烦人,可以使用using declaration,如下所示:

using mynamespace::Vector2;

告诉编译器将Vector2解析为文件其余部分(翻译单元)的矢量类型。