是否可以实现自己的强制转换规则并使编译器发出警告而不是错误?
我目前正在使用SFML(如果你不知道它并不重要)并且它有一个简单的Vector2结构:
template <typename T>
struct Vector2 {
Vector2<T>(T,T);
T x,y;
}
现在我经常使用它,并希望为此结构设置自定义强制转换规则,因为我无法修改源代码。我目前有一个需要Vector2<int>
的函数,但我使用的函数返回Vector2<unsigned int>
,编译器似乎无法将其转换为另一个有点奇怪的函数。< / p>
我知道我可以使用强制转换(和static_cast
工作),但对于像这样的简单转换似乎有点过于复杂,有点愚蠢,因为这样我无法测试我的程序。所以我可能正在寻找的是可以设置这种强制转换规则的编译器命令。
答案 0 :(得分: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;
};