【发布时间】:2015-03-17 14:16:26
【问题描述】:
我正在编写一个带有整数和小数位模板参数的小型定点算术类。当两个小的定点类型相乘时,结果应该是一个更大的定点类型来捕获完整的结果。例如。两个 8.8 定点数相乘得到 16.16 定点数。
我的班级是这样的:
template<typename T, unsigned int bits, unsigned int frac>
class FixedPoint {
public:
constexpr FixedPoint(int x = 0) : raw_(x << frac) { }
constexpr FixedPoint(double x) : raw_(x * (T(1) << frac)) { }
private:
T raw_;
}
现在的问题是 T 模板参数,特别是对于乘法,因为结果类型与参数类型不同并且无法推断。写 a * b 不起作用。
我想做的是用模板类型 Int
如何写出这样的类型?我可以将其限制为 8、16、32 或 64 位。
【问题讨论】:
-
你为什么要向用户公开
T?这不是隐藏的实现细节吗?他们不应该只能看到bits和frac吗? -
是的,他们应该这样做。我只是不知道如何在内部为 T 选择正确的类型。这基本上就是问题所在。