0

我在我的项目中定义了一个 Vector2 类

class Vector2
{
public:
    Vector2();
    ~Vector2();
protected:
    float mX;
    float mY;
}

我开始使用一个名为SFML的库

除此之外,它还为我处理绘制形状和图像。

SFML定义了它自己的 Vector2类。显然,这会导致一些命名空间问题。这是我解决它的方法:

// Using an SFML Vector2
sf::Vector2 sfmlVector;

// Using my Vector2
::Vector2 myVector;

我希望“Vector2”始终被假定为我的 vector2,而“sf::Vector2”始终是 SFML 的 vector2,而不是必须将命名空间放入我的 vector2 或使用更混乱的全局 :: 命名空间。

这可以做到吗?

4

2 回答 2

1

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

using mynamespace::Vector2;

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

于 2013-01-31T17:51:02.093 回答
1

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

于 2013-01-31T17:40:30.890 回答