【发布时间】:2020-08-30 20:54:27
【问题描述】:
我想为两种类型专门化一个模板,这两种类型都基于相同的基本类型:
using myint=uint16_t; //16 bit integer
using myfxpt=uint16_t //8+8 bit fix point number
不可能为两者专门化一个模板,因为两者都是uint16_t。但是,根据表示方式,它们还是有区别的。
如何找到解决此问题的方法?使用某种透明的固定点类也可能是一种解决方案,但有效性很重要。不知道怎么写才能让编译器优化后得到同样的结果。
【问题讨论】:
-
你能用
struct FixPtStruct { uint16_t fp; };吗? -
myint和myfxpt目前是同一类型。它们只是相同类型的不同名称的别名。您需要不同的类型。对于myfxpt,您可以改用具有合适API 的结构- 与unit16具有相同的加法运算但不同的乘法运算以适应其像素点性质。 -
为了可维护性,我想将该类型用作基本类型。我可以定义几个特性,例如赋值
fxpt = myconst和其他运算符,但我仍然不知道最终代码的效率如何。甚至,我只需要加减法,所以编译器的内置解决方案就足够了。只是处理这些数据应该是不同的。 (例如显示值) -
boost 有很强的 typedef
-
但我仍然不知道最终代码的效率如何 与相同大小的原始类型相同,启用优化。
标签: c++ templates template-specialization specialization