0

是否可以实现自己的强制转换规则并使编译器给出警告而不是错误?

我目前正在使用 SFML(如果你不知道也没关系),它有一个简单的 Vector2 结构,如下所示:

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

现在我经常使用它,并且想为此结构设置自定义转换规则,因为我无法修改源代码。我目前有一个需要 a 的函数Vector2<int>,但是我使用的函数返回 aVector2<unsigned int>并且编译器似乎无法将一个转换为另一个,这有点奇怪。

我知道我可以使用演员表(和static_cast作品),但对于像这样的简单转换来说似乎有点过于复杂,而且有点愚蠢,因为这个我无法测试我的程序。所以我可能正在寻找的是可以设置此类强制转换规则的编译器命令。

4

1 回答 1

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 回答