C ++ Setup拥有模板类/结构的强制转换规则

时间:2013-03-16 02:53:12

标签: c++ compiler-construction casting

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

我目前正在使用SFML(如果你不知道它并不重要)并且它有一个简单的Vector2结构:

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

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

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

1 个答案:

答案 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;
};