0

独自のキャスト規則を実装し、コンパイラにエラーではなく警告を表示させることは可能ですか?

私は現在、SFML を使用しており (知らない場合は問題ありません)、次のような単純な Vector2 構造を持っています。

template <typename T>
struct Vector2 {
    Vector2<T>(T,T);
    T x,y;
}

現在、私はこれをかなり頻繁に使用しており、ソース コードを変更できないため、この構造のカスタム キャスト ルールを設定したいと考えています。私は現在、 を必要とする関数を持っていますがVector2<int>、私が使用する関数は a を返しVector2<unsigned int>、コンパイラはその関数を別の関数にキャストできないようです。これは少し奇妙です。

キャストを使用できる(そしてstatic_cast機能する)ことはわかっていますが、このような単純な変換には少し手の込んだように思えます。また、このためにプログラムをテストできないのは少しばかげています。だから私がおそらく探しているのは、そのようなキャストルールを設定できるコンパイラコマンドです。

4

1 に答える 1

2

これを行うには 2 つの方法があります (どちらの方法でも の定義を変更する必要がありますVector2)。変換を実行する非明示的なコンストラクターを追加できます。

template <typename T>
struct Vector2 {
    template<typename U>
    Vector2(Vector2<U> const& u) : x(u.x), y(u.y){}
    Vector2(T x,T y) : x(x), y(y) {}
    T x,y;
};

または、非明示的な型キャスト演算子を追加できます。

template <typename T>
struct Vector2 {
    template<typename U>
    operator Vector2<U>(){
        return Vector2<U>(x,y);
    }
    Vector2(T x,T y) : x(x), y(y) {}
    T x,y;
};
于 2013-03-16T03:11:14.433 に答える