【发布时间】:2015-03-22 01:58:37
【问题描述】:
基本上我想完成这个Conversion between 2 template types
但我希望赋值运算符或复制构造函数是专门的。
例如,我有一个颜色类:
template<typename T = float>
class color
{
public:
T r;
T g;
T b;
T a;
color(T R, T G, T B, T A)
: r(R), g(G), b(B), a(A)
{
}
};
一般情况下,floats 在0 和1 之间需要颜色分量。但是,将组件提供为介于 0 和 255 之间的数字通常更容易,因为这通常是您在 Photoshop 或 GIMP 中得到的。
所以,我希望此类的实例能够在 float 和 int 类型之间进行转换:
color<int> c1(255,234,122,14);
color<float> c2 = c1;
当它这样做时,c1 中的数字除以 255 得到 0 到 1 的等价物。
所以到目前为止我已经这样做了:
template<typename U>
color<T>(color<U> c)
: r(c.r/255.0), g(c.g/255.0), b(c.b/255.0), a(c.a/255.0)
{
}
但这也会将float 实例除以255。我不知道如何专门化此构造函数(或赋值运算符),使其仅对 int 到 float 专业化有效。
【问题讨论】: