【发布时间】:2015-06-15 08:13:43
【问题描述】:
我正在编写一个库来支持具有两个模板参数INT_BITS 和FRAC_BITS 的整数类型。我成功地编写了一个转换函数来将不同的类类型从一种转换为另一种[INT_BITS 和FRAC_BITS 的值不同]。但是当我尝试在赋值运算符的重载中使用它时它不起作用。请建议我一种实现它的方法。我浏览了链接 here here 和 here ,但似乎没有一个解决方案有效。
类定义:
template<int INT_BITS, int FRAC_BITS>
struct fp_int
{
public:
static const int BIT_LENGTH = INT_BITS + FRAC_BITS;
static const int FRAC_BITS_LENGTH = FRAC_BITS;
private:
ValueType stored_val;
};
转换函数定义:
template <int INT_BITS_NEW, int FRAC_BITS_NEW>
fp_int<INT_BITS_NEW, FRAC_BITS_NEW> convert() const
{
typedef typename fp_int<INT_BITS_NEW, FRAC_BITS_NEW>::ValueType TargetValueType;
return fp_int<INT_BITS_NEW, FRAC_BITS_NEW>::createRaw(
CONVERT_FIXED_POINT<
ValueType,
TargetValueType,
(FRAC_BITS_NEW - FRAC_BITS),
(FRAC_BITS_NEW > FRAC_BITS)
>:: exec(stored_val));
}
运算符定义如下:
template <int INT_BITS_NEW, int FRAC_BITS_NEW>
fp_int<INT_BITS_NEW, FRAC_BITS_NEW>
operator =(fp_int<INT_BITS,FRAC_BITS> value) const
{
fp_int<INT_BITS_NEW,FRAC_BITS_NEW> a = value.convert<INT_BITS_NEW,FRAC_BITS_NEW>();
return a;
}
当我尝试这个时,它会起作用:
fp_int<8,8> a = 12.4;
fp_int<4,4> b = a.convert<4,4>();
但是当我尝试这样做时,它会显示类型转换错误:
fp_int<8,8> a = 12.4;
fp_int<4,4> b;
b = a;
请告诉我哪里出错了。
【问题讨论】:
标签: c++ templates type-conversion operator-overloading template-meta-programming