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 であることが望ましいです。

これはできますか?

4

2 に答える 2

1

名前空間内にコードを追加していない限りsf、ルックアップはVector2その名前空間内を検索しようとせず、グローバル名前空間を検索します。sf名前空間内にコードを追加する場合は、sf::Vector2最初に見つかります...しかし、ライブラリ内のコードはライブラリの型を使用する必要があると思います。

于 2013-01-31T17:40:30.890 に答える
1

グローバルなものを汚染しないように、独自のVector2クラスを独自の名前空間に配置します。ただし、クラスを使用するときに名前空間を毎回指定するのが面倒な場合は、次のようにusing 宣言を使用できます。

using mynamespace::Vector2;

Vector2残りのファイル (変換単位) のベクトル型に解決するようにコンパイラに指示します。

于 2013-01-31T17:51:02.093 に答える